aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/c.bqn26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/c.bqn b/src/c.bqn
index 535a37e8..807e763a 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -4,7 +4,7 @@ charSet‿cgl←(∾ ≍○< ≠¨)⟨
"˙˜˘¨⌜⁼´˝`" # Modifier
"∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition
lf∾"⋄," # Separator
- "←↩" # Gets
+ "⇐←↩" # Gets
"(){}⟨⟩" # Bracket
"‿" # Ligature
"·" # nOthing
@@ -111,7 +111,8 @@ Parse ← {r‿nv←𝕨
"Swapped open and closed brackets" ! 0≤(⊑g)⊑pd
"Parentheses can't contain separators" ! ¬∨´((⊑bB)⊸=/·«sep⊸=)gb/gx
"Empty statement or expression" ! ∧´(4+⊑bB)=(1⊸«⊸∧1∾gb)/0∾gx
- "Invalid assignment or stranding use" ! ∧´(r≤¯2)/r»⊸∧⟜«○(0⊸≤)r+p
+ r-↩(𝕩=⊑bG)>ec←«0≤r+p
+ "Invalid assignment or stranding use" ! ∧´((¯4⊸<∧≤⟜¯2)r)/ec∧»0≤r
sr←»⌾(g⊸⊏)sl←«⊸∨r=¯2⋄cp←𝕩=1+⊑bB
g⊏˜↩⍋g⊏sl
rev←⍋+`¯1↓(¯1∾g)(⊣⍋⊸⊏⊏˜⟜⍋¬⊏˜)⍋+`⊸+1∾g⊏sl∨r=¯1
@@ -123,6 +124,8 @@ Parse ← {r‿nv←𝕨
H←¬1(∾/∾˜)c(∨/⊣)=
sn←(0‿3‿4‿5+5+⊑bI)⍋𝕩⋄fx←1 H sn⋄fr←(fx∨0⊸<)⊸+ft←(2⊸H⌈2×3⊸H)sn
"Special name outside of any block" ! 0=⊑fr
+ nf←(⊑bG)H𝕩
+ "Can't export from a non-immediate block" ! ∧´nf≤fr=0
fsc←(ft⊏0‿2‿3)+3×fx
pt←cp∧ns←¬sl∨sr
r↩sl-˜ns×(1↓fr)⌾((b⊏rev)⊸⊏)r
@@ -132,15 +135,15 @@ Parse ← {r‿nv←𝕨
r+↩pt×»ir
id←/idm←(0⊸≤∧<⟜nv)xv←𝕩-vi⋄idx←id⊏𝕩⋄sp←/𝕩 M bI
- ad←𝕩(=>○IT⊣=1+⊢)⊑bG
+ ac←𝕩(IT∘M⊏-⟜⊑-(rev⊏¯4=r)˙)bG
g↩⍋+`rev⊏p-br⋄gr←g⊏rev⋄sll←1+2÷˜0(<-○/>)gr⊏sr-sl⋄l←/g⊏𝕩=5+⊑bB
g⊏˜↩gs←⍋gr⊏sl⋄gr↩g⊏rev⋄gi←⍋g
𝕩⊏˜↩g⋄r⊏˜↩gr⋄ir⊏˜↩gr⋄si←/gr⊏sr>sl⋄l⊏↩⍋gs
- a←r=¯3⋄ps←a<r<0⋄tr←1≤er←ir⊏˜IT»ps
+ a←r≤¯3⋄ps←a<r<0⋄tr←1≤er←ir⊏˜IT»ps
oa←⌽/op←(er<2)∧r≥2⋄ro←op∨«op∧r=3
- ma←tr<(𝕩=1+⊑bG)∧«ir≥1
- os←↕∘≠⊸(⊣-T)⌾⌽¬ro∨ma⋄at←1+⊏⟜os⊸+/a
+ ma←tr<(𝕩=2+⊑bG)∧«ir≥1
+ os←↕∘≠⊸(⊣-T)⌾⌽¬ro∨ma⋄at←1+⊏⟜os⊸+ai←/a⋄af←¯4≠ai⊏r
"Role of the two sides in assignment must match" ! (at⊏er)≡ar←at⊏r
"Function or modifier assignment to a non-name" ! ∧´(ar=0)∨(at⊏g)⊏idm
aa←g⊏asn←»+`gi⊏«⊸-(≠𝕩)↑/⁼at
@@ -153,21 +156,22 @@ Parse ← {r‿nv←𝕨
ll←(¬lo/1«ps)+-⟜»1↓(lo∾1)/+`ls∾0
dr←/ls<s⋄rt←/fo
- d←id⊏dec←idm∧ad∧asn⋄lc←-⟜»(c∾1)/+`dec∾0
- ixf←(⊏⟜(¯1∾c/gf)∾d⊸/⊏((≠𝕩)∾b⊏gf)˜)id⊏fi
+ d←id⊏dec←idm∧asn∧(ac<2)>ax←ac<0⋄ix←id⊏ax
+ ixf←((ix+⊏⟜(¯1∾c/gf))∾d⊸/⊏((≠𝕩)∾b⊏gf)˜)id⊏fi
ig←(⍋⊏⟜(ixx←∾⟜(d⊸/)idx))⊸⊏⍋ixf
"Multiple definitions" ! 1∧´ixx∨○(»⊸≠((≠id)⊸≤⊸/ig)⊏⊢)ixf
ig↩<⟜(≠id)⊸/(⍋+`∘⊏⟜(d∾-/˜d))⊸⊏ig
d⊏˜↩ig⋄ErrUndeclared∘/˜⍟(0∨´⊢)⟜(d<»⊸≠)ig⊏idx
ui←(IT d)⊸⊏⌾(ig⊸⊏)id
- ii←(ui⊏(fi⊏fsc)-c⊸T⊸¬+`dec)∾((sp⊏fi)⊏3×fx)++⟜(0⊸≤)2+sp⊏xv
+ lc←(1«c)/dn←c(⊢-T)+`dec
+ ii←(ui⊏(fi⊏fsc)+dn-1)∾((sp⊏fi)⊏3×fx)++⟜(0⊸≤)2+sp⊏xv
idor←∾3⥊<is←id∾sp
idbc←⟨21+is⊏asn,(id-○(⊏⟜fd)ui)∾0¨sp,ii⟩
b⊏↩gi
- or←⍋idor∾g⊏˜∾⟨cn,cn,b,b,dr,l,l,si,si,at,oa+1⌈oa⊏os,(dy×⊏⟜os)⊸+fa+dy,rt⟩
+ or←⍋idor∾g⊏˜∾⟨cn,cn,b,b,dr,l,l,si,si,af/at,oa+1⌈oa⊏os,(dy×⊏⟜os)⊸+fa+dy,rt⟩
bc←or⊏∾idbc∾⟨0¨cn,ob,15¨b,1+↕≠b,14¨dr,3+l⊏aa,ll,3+si⊏aa,sll
- (11-⊑bG)+a/ma+𝕩,5+oa⊏r,(⊢+9×10⊸=)16+dy-7×fa⊏er,25¨rt⟩
+ 11⌈(11-1+⊑bG)+(af/ai)⊏ma+𝕩,5+oa⊏r,(⊢+9×10⊸=)16+dy-7×fa⊏er,25¨rt⟩
bcl‿el←LEB bc∾25
⟨bcl,u,⟨ft,¬fx,el/˜1∾or≥bc-○≠rt,lc+fsc⟩⟩
}