From e0360828f3d8e495c943303cfc8e7b67724018e0 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Sat, 8 May 2021 15:15:43 -0400 Subject: Test for definition of special names --- src/c.bqn | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/c.bqn b/src/c.bqn index 29e8aec4..943695de 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -162,7 +162,7 @@ Parse ← {r‿vn‿i‿e←𝕨⋄nv←≠vn ir(×⟜¬-⊢)↩nr # Include nothingness (doesn't handle 𝕎) # Prep for lexical resolution before reordering 𝕩 - idv←𝕩⊏˜id←/idm←(0⊸≤∧<⟜nv)xv←𝕩-vi + idv←xv⊏˜id←/idm←(0⊸≤∧<⟜nv)xv←𝕩-vi # Parsing part 1 p-↩br⋄g↩⍋+`p⋄gr←g⊏rev # Order by non-brace bracket depth @@ -171,7 +171,6 @@ Parse ← {r‿vn‿i‿e←𝕨⋄nv←≠vn {i↩(𝕨⊏i)⌾(𝕩⊸⊏)i⋄e↩(𝕩⊏e)⌾(𝕨⊸⊏)e}´bp # Highlight all contents of a pair when error reporting g⊏˜↩gs←⍋gr⊏sl⋄gr↩g⊏rev⋄gi←⍋g # Send strand prefixes *‿ to the end 𝕩⊏˜↩g⋄r⊏˜↩gr⋄ir⊏˜↩gr⋄l↩(l⊏⍋gs)∾/gr⊏sr>sl - bk←c⊏gi # Block loads a←r≤¯3⋄ps←aaa # Lexical resolution (independent of parsing part 2 below) - ip←id⊏ac⋄d←ip M 2‿2⋄xm←ip M 1‿2 # Assignment classes; which are definitions, exports - idn←(idg←(d/id⊏fi)∾≠fsc)⊔vi-˜d/idv # Numbers for each identifier, per-block + ip←id⊏ac⋄d←id⊏dd←ac M 2‿2⋄xm←ip M 1‿2 # Assignment classes; which are definitions, exports + "Can't define special name"_err_(SP) sp⊏dd + idn←(idg←(d/id⊏fi)∾≠fsc)⊔d/idv # Numbers for each identifier, per-block # Order every referenced identifier, an extraction for each import, and an undeclaration for each declaration ixf←(((1=ip)+⊏⟜(¯1∾b/gf))∾d⊸/⊏((≠𝕩)∾c⊏gf)˙)id⊏fi # First order by block index, open for real and closed for virtual ig←(⍋⊏⟜(ixx←∾⟜(d⊸/)idv))⊸⊏⍋ixf # Then order by name {"Redefinition"_err_(𝕩⊏·∾⟜(d⊸/)ID) ¬ixx∨○(»⊸≠𝕩⊸⊏)ixf} (≠d)⊸≤⊸/ig ig↩<⟜(≠d)⊸/(⍋+`∘⊏⟜(d∾-/˜d))⊸⊏ig # Last order by declaration depth d⊏˜↩ig⋄idv⊏˜↩ig - ("Undefined identifier"Pl/)_err_(ig⊏ID) d<»⊸≠idv + ("Undefined identifier"Pl/)_err_(ig⊏ID) d<¯1⊸»⊸≠idv idx←idg⊔(⍋d/ig)⊏d(/≥1↓PN)0