aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/c.bqn11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/c.bqn b/src/c.bqn
index 020421b8..615b0709 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -231,10 +231,11 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
"Dot must be preceded by a subject"_err_(⍋∘rev) (r=4)>»r=0
r(×⟜¬-⊢)↩dl # Namespace and dot to ¯1
- # Prep for lexical resolution before reordering 𝕩
- xv←𝕩-vi
+ # Reorder for parsing
+ xv←𝕩-vi # Save for lexical resolution
{i↩(𝕨⊏i)⌾(𝕩⊸⊏)i⋄e↩(𝕩⊏e)⌾(𝕨⊸⊏)e}´bp # Highlight all contents of a pair when error reporting
- 𝕩⊏˜↩g⋄hg←g⊏hf⋄r⊏˜↩gr⋄ir⊏˜↩gr⋄l↩(l0←l⊏⍋gs)∾/gr⊏sr>sl
+ 𝕩⊏˜↩g⋄hg←g⊏hf⋄r⊏˜↩gr⋄ns⊏˜↩gr⋄ir⊏˜↩gr
+ l↩(l0←l⊏⍋gs)∾/gr⊏sr>sl # Indices of list literals
lm←(0¨sll)∾˜(5+⊑bB)-˜l0⊏𝕩 # List merge, adding 2 for []
# Parsing part 1
@@ -257,7 +258,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
at∾↩hj⋄ac←«⊸-(ak∾6¨hj)⌾(at⊸⊏)0¨𝕩 # Header assignment is 6 temporarily
aa←×gac←g⊏ac↩»+`(1⊸»⊸∨0=+`)⊸×gi⊏ac # Broadcast ac to the entire target
api←/(𝕩=⊑bO)∧ap←aa∧2=no # Assignment placeholder
- "Can't use Nothing (·) in lists"_nerr (¬ap)×no×(gr⊏¬ns)∨»lo∨ls
+ "Can't use Nothing (·) in lists"_nerr (¬ap)×no×ns≤»lo∨ls
"Square brackets can't be empty"_err_(G) aa<(𝕩=6+⊑bB)∧1«ps
ac-↩3×ah←6=ac # Assignment is header; 6→3
nx⌈↩aa×1=no # Prevent assignment to 𝕨 if it's ·
@@ -275,7 +276,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
"Can't nest assignments (write aliases with ⇐)"_err_(ai⊏G) ((5≠ai⊏gac)∧ak=2)<ai⊏aa
"Can't use result of function/modifier assignment without parentheses"_err_(G) hg<(0<er)∧(0≤r)∧»⊸>aa
af>↩alm←ai⊏aa⋄al←alm/ai # aliases al
- "Aliases can only appear in ⟨⟩ bracketed lists"_err_(al⊏G) ¬al⊏(fo∨𝕩=⊑bB)<○IT lo
+ "Alias must have a name on the right and appear within ⟨⟩"_err_(al⊏G) ¬(al-1)⊏aid∧ns∧»ls∨𝕩=4+⊑bB
ai/˜↩af⋄at/˜↩af∾1¨hj
# Lexical resolution (independent of parsing part 2 below)