diff options
| author | Marshall Lochbaum <mwlochbaum@gmail.com> | 2021-05-24 21:57:11 -0400 |
|---|---|---|
| committer | Marshall Lochbaum <mwlochbaum@gmail.com> | 2021-05-24 21:57:23 -0400 |
| commit | c6bdf07d6e2ca4d1c641bc67e3eb9cbb3c5f9458 (patch) | |
| tree | c5a74d7d3bc1a880c1b43282b8047796d906b8d2 /src | |
| parent | b3af2967b3898d4a6602d6a91e5590cafacc2a35 (diff) | |
Cleaner undefined identifier test
Diffstat (limited to 'src')
| -rw-r--r-- | src/c.bqn | 8 |
1 files changed, 4 insertions, 4 deletions
@@ -204,12 +204,12 @@ Parse ← {r‿vn‿i‿e←𝕨⋄nv←≠vn idn←(idg←df∾≠fsc)⊔dv←d/idv←id⊏xv # Identifier name ID, per-block # Order every referenced identifier, and an undeclaration for each declaration ixf←((1=ic)+idf⊏¯1∾b/gf)∾df⊏(≠𝕩)∾c⊏gf # First order by block index, open for real and closed for virtual - ig←(⍋⊏⟜(ixx←idv∾dv))⊸⊏⍋ixf # Then order by name - {"Redefinition"_err_(𝕩⊏·∾⟜(d⊸/)ID) ¬ixx∨○(»⊸≠𝕩⊸⊏)ixf} (≠d)⊸≤⊸/ig - ig↩<⟜(≠d)⊸/(⍋+`∘⊏⟜(d∾¯1¨dv))⊸⊏ig # Last order by declaration depth + ig←(⍋⊏⟜(ixx←idv∾dv))⊸⊏⍋ixf⋄igf←ig<≠d # Then order by name + {"Redefinition"_err_(𝕩⊏·∾⟜(d⊸/)ID) ¬ixx∨○(»⊸≠𝕩⊸⊏)ixf} igf¬⊸/ig + ig↩(do←⊏⟜igf⊸/⍋ds←+`ig⊏d∾¯1¨dv)⊏ig # Last order by declaration depth d⊏˜↩ig⋄id⊏˜↩ig⋄ic⊏˜↩ig + ("Undefined identifier"Pl/)_err_(ID) 0=do⊏ds ix←(ic<3)∧ia←0<ic # Which are exports, assignments - ("Undefined identifier"Pl/)_err_(ID) d<¯1⊸»⊸≠ig⊏idv idd←(⊢-(IT d)⊸⊏)id⊏fd # Identifier frame depth "Can't export from surrounding scope"_err_(ID) ix∧0<idd idx←idg⊔(dig←⍋d/ig)⊏d(/≥1↓PN)ix # Exported identifier mask |
