aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2022-07-24 10:21:17 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2022-07-24 10:21:17 -0400
commit058b30665a02a0a06eda778d77a523ff8f786388 (patch)
treee630597f60cccf8dc4c45f02ab0f63fd8362428f
parent79ddcd49cae75e746981819b713ccad95cc2a7a3 (diff)
Check for export statements used in parens or list/array notation
-rw-r--r--src/c.bqn8
-rw-r--r--test/cases/namespace.bqn2
2 files changed, 7 insertions, 3 deletions
diff --git a/src/c.bqn b/src/c.bqn
index 30fbf729..eaf221b3 100644
--- a/src/c.bqn
+++ b/src/c.bqn
@@ -137,14 +137,16 @@ Parse ← {r‿vn‿i‿e‿def←𝕨⋄nv←≠vn
# Open brackets have role ¯1 and closed ones have role 0
"Empty program" ! 0<≠𝕩
g←⍋pd←+`p←(¯1-2×r)×𝕩 M bB⋄gb←g⊏r=¯1 # Paren (actually any bracket type) depth and grade
- ErrMismatchedBrackets∘𝕩⍟¬ (g⊏p)(>⟜0⊸/≡1-˜<⟜0⊸/)gx←g⊏𝕩
+ ErrMismatchedBrackets∘𝕩⍟¬ (gp←g⊏p)(>⟜0⊸/≡1-˜<⟜0⊸/)gx←g⊏𝕩
"Swapped open and closed brackets"_err_(1↑G) 0>(⊑g)⊑pd
- "Parentheses can't contain separators"_err_(gb/G) ((⊑bB)⊸=»⊸∧sep⊸=)gbx←gb/gx
- "Punctuation : ; ? outside block top level"_err_((sep≠GBX)/gb/G) (⊑bB)⊸≤⊸(⊣<1»(2+⊑bB)⊸=⊸<˜)sep⊸≠⊸/gbx
+ "Parentheses can't contain separators"_err_(gb/G) ((⊑bB)⊸=»⊸∧sep⊸=)gb/gx
+ bt←(1=gp)(+`∘⊣⊏2∾(2+⊑bB)=/)gx # Surrounding bracket type: 1 block, 2 none
+ "Punctuation : ; ? outside block top level"_err_(G) (1=bt)<gx M bH
{"Empty statement or expression"_err_(𝕩/0∾G) (4+⊑bB)>𝕩/0∾gx}1⊸«⊸∧1∾gb
dl←«⊸∨dc←r=4 # Dot left
r-↩(𝕩=⊑bG)>ec←«dc<0≤r+p # Role ¯4 for exports: ⊑bG is ⇐
"Invalid assignment or stranding use"_err_(↕≠) ((¯4⊸<∧≤⟜¯2)r)>(ec∨𝕩=2+⊑bG)∧»dc<0≤r
+ "Can't use export statement as expression"_err_(G) (0<bt)<g⊏¯4=r
"Can't use export statement as predicate"_err_(↕≠) (»¯4=r)∧𝕩=pred
"Dot must be followed by a name"_err_(↕≠) dc>«𝕩 M vi‿nv
sr←»⌾(((⍋⊏⟜dl)⊸⊏g)⊸⊏)sl←«⊸∨r=¯2⋄ns←¬sl∨sr # Strand right and left; not stranded
diff --git a/test/cases/namespace.bqn b/test/cases/namespace.bqn
index bdc83878..2d0a7aa3 100644
--- a/test/cases/namespace.bqn
+++ b/test/cases/namespace.bqn
@@ -13,6 +13,8 @@
! % ⟨b⟩←{b←a⇐3⋄b+1}⋄b
! % ⟨a⟩←{⟨a,-⟩⇐⋄a←3}⋄a
! % ≠⟨{𝕩⇐}⟩
+! % ⟨÷,⇐,1⟩
+! % {(a⇐)×2⋄a←1}
# Aliasing
5 % ⟨c⇐a⟩←{a⇐5}⋄c