From 058b30665a02a0a06eda778d77a523ff8f786388 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sun, 24 Jul 2022 10:21:17 -0400 Subject: Check for export statements used in parens or list/array notation --- src/c.bqn | 8 +++++--- test/cases/namespace.bqn | 2 ++ 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)𝕩/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«𝕩 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 -- cgit v1.2.3