aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-11-28 19:31:51 -0500
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-11-28 19:37:12 -0500
commit92bd804e1249774b33f54cc9b8504ac9e72ca651 (patch)
tree97d4eb44d75733bc75f4c5f7523f45c8f7850c87 /src
parentb2df3496227d2d7ebe1363fad0bafbfcb2a6efb4 (diff)
Allow · as placeholder in assignment and headers
Diffstat (limited to 'src')
-rw-r--r--src/c.bqn10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/c.bqn b/src/c.bqn
index a4e6d011..a3cb8468 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -147,7 +147,6 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
cp←𝕩=1+⊑bB # Closed paren
nr←(IT¬cp)⊏(𝕩=2+⊑bI)+2×𝕩=⊑bO # Nothingness role: 1 for 𝕨, 2 for ·
nx←0 ⋄ nei←↕≠nr ⋄ _nerr←{𝕗 _err_ nei 2=nx⌈↩𝕩}
- "Can't strand Nothing (·)"_nerr nr׬ns
g⊏˜↩⍋g⊏sdl←sl∨dl # Avoid reordering strands and dots in rev
rp←≠⊸»⌾(g⊸⊏)↕≠r # Position of previous, for roles
# Permutation to reverse each expression: *more* complicated than it looks
@@ -242,7 +241,6 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
"Missing operand"_nerr op×2(«⌈m2×»)no⌈2×m2≥ro∨r∊↕2
s←𝕩=sep⋄fo←𝕩∊⟨2+⊑bB,1+⊑bH⟩ # Separators, function open { or ;
ls←s∧fo<○IT lo←𝕩=4+⊑bB # List Separators: after ⟨lo, not {fo
- "Can't use Nothing (·) in lists"_nerr ne×»lo∨ls
"Double subjects (missing ‿?)"_err_(G) ∧⟜«ro»⊸∨⊸<r=0
mm←𝕩=2+⊑bG⋄ma←tr<mm∧«ir≥1⋄mm∧↩1»ps # Modified assignment; monadic modified
"No right-hand side in non-modified assignment"_err_(G) ma<mm
@@ -252,6 +250,8 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
ak←af+(0≤ar)+(ai⊏ma)+(⊑bG)-˜ai⊏𝕩 # Class of assignment: 1⇐ 2⇐? 3←? 4↩? 5+↩?
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←/ap←aa∧2=no # Assignment placeholder
+ "Can't use Nothing (·) in lists"_nerr (¬ap)×no×(gr⊏¬ns)∨»lo∨ls
ac-↩3×ah←6=ac # Assignment is header; 6→3
nx⌈↩aa×1=no # Prevent assignment to 𝕨 if it's ·
nf←H ac<xv=vi-˜⊑bG # Namespace bodies
@@ -264,7 +264,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
aid←(¯6⊸≤∧<⟜nv)𝕩-vi # Assignable identifer
hq←/hp←(g⊏ah)∧𝕩≥nv+vi # Header constant
atc←(hg<ps<«aa∧r≥0)<aid∨hp∨(ps>«𝕩=⊑bL)∨𝕩(=⟜(3+⊑)<M)bB
- "Assignment target must be a name or list of targets"_err_(G) (a∨atc)<aa
+ "Assignment target must be a name or list of targets"_err_(G) (a∨atc∨ap)<aa
"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
@@ -318,8 +318,8 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
# Object code generation: numbers oc ordered by source location (after rev) oi
ao←48+(0⌈(1+⊑bG)-˜ai⊏𝕩+ma+mm)∾-hd # Assignment opcode
- or←⍋oi←idor∾g⊏˜∾⟨cn,cn,bk,bk,hq,2/l,at,dr,qp,al+1,al+1,oa+1⌈oa⊏os,fl,rt⟩
- oc←or⊏∾idoc∾⟨0¨cn,ob,1¨bk,1+↕≠bk,43¨hq,⥊⍉(11+l⊏aa)≍ll,ao,6¨dr,42¨qp,66¨al,vi-˜(al-1)⊏𝕩
+ or←⍋oi←idor∾g⊏˜∾⟨cn,cn,bk,bk,hq,2/l,api,at,dr,qp,al+1,al+1,oa+1⌈oa⊏os,fl,rt⟩
+ oc←or⊏∾idoc∾⟨0¨cn,ob,1¨bk,1+↕≠bk,43¨hq,⥊⍉(11+l⊏aa)≍ll,44¨api,ao,6¨dr,42¨qp,66¨al,vi-˜(al-1)⊏𝕩
24+oa⊏r,16+(fn/dy+2×fm⌈1=ny)+4×0<fa⊏er,¯1↓rc←7+nf⟩
# Instruction source positions
MI←-⊸↓˜⟜≠∾g⊏˜⊢⋄oj←(rt-∘≠⊸⌽oi⌊1-˜≠i)Mi∾⟨1-˜at,oa,fa⟩