aboutsummaryrefslogtreecommitdiff
path: root/src/c.bqn
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-08-11 20:55:04 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-08-11 20:55:04 -0400
commit516919d53ad441d24dba88cd5fbd10c9c72a2b02 (patch)
treecfa0671c9db0350629d06d46028daeca07fd2909 /src/c.bqn
parent2afb23928e1984d475cc460e1672e8f6fa0e4dbe (diff)
Fix computation of never-Nothing indicator nn
Diffstat (limited to 'src/c.bqn')
-rw-r--r--src/c.bqn7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/c.bqn b/src/c.bqn
index 1093cf61..1827d563 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -220,8 +220,8 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
"Nothing (·) cannot be assigned"_nerr ne×a
oa←⌽/hf<op←(er<2)∧r≥2⋄ro←op∨«op∧m2←r=3 # op: active modifiers; ro: mod or right operand
"Missing operand"_nerr op×2(«⌈m2×»)no⌈2×m2≥ro∨r∊↕2
- s←𝕩=sep⋄fo←𝕩=2+⊑bB⋄ls←s∧fo<○IT lo←𝕩=4+⊑bB # List Separators: after ⟨lo, not {fo
- fc←𝕩=1+⊑bH
+ 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
ma←tr<(𝕩=2+⊑bG)∧«ir≥1 # Modified assignment
@@ -235,6 +235,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
fw←H gi⊏nx # Bodies where 𝕨 must be defined
{"Can't return Nothing (·)"_err_(𝕩⊏⍋∘Rev) 2=fw⌈↩nf¬⊸×𝕩⊏nr} 1-˜0∾cc⊏rev
"Invalid use of 𝕨 in monadic case"_err_(/CB) 1↓fw∧cw=0
+ fw∨↩2=cw
nn←fo+`⊸⊏fw⋄no(⊣-=)↩nn⋄ne(⊣-=)↩nn # fw indicates 𝕨 is never Nothing
"Assignment target must be a name or list of targets"_err_(G) (a∨aid∨ps∨𝕩(=⟜(3+⊑)<M)bB)<aa
"Can't nest assignments (write aliases with ⇐)"_err_(ai⊏G) (ak=2)<ai⊏aa
@@ -282,7 +283,7 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
cn←pi∾lt←/𝕩≥cl←vi+nv⋄ob∾↩(cl-˜≠u)+lt⊏𝕩 # Constants
bk←c⊏gi # Block loads
ll←sll∾˜(¬lo/1«ps)+-⟜»1↓(lo∾1)/+`ls∾0 # List Length
- dr←/s>(2=ne)∨ls∨»r=¯5⋄rt←/fo∨fc # Drop (block separator) and return
+ dr←/s>(2=ne)∨ls∨»r=¯5⋄rt←/fo # Drop (block separator) and return
fl←(dy×⊏⟜os)⊸+fa+dy # Function application site
dr∾↩((1+dy)×fn←2=fm←fa⊏ne)/fl # Turn function applications on · to drops
fn↩¬fn⋄fa/˜↩fn⋄fl/˜↩fn # And remove them