From 87bbf321aa3b339561566208de6933fcb7358101 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Fri, 7 May 2021 21:57:55 -0400 Subject: Remove the module special case --- src/c.bqn | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/c.bqn b/src/c.bqn index 45facb91..04a28d6d 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -171,10 +171,7 @@ 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 - ni←1+nf/¯1∾bk←c⊏gi # Indices of import arrows - nm←(nf/fr=0)∧∧˝¯3‿0‿¯1=(r∾¯1‿1)⊏˜(↕3)+⌜ni # Namespace is module: immediately assigned, - nm∧↩(⊏⟜idm≤⊏⟜rev⊏sr˙)(ni+1)⊏g # ...and destructured - nf∧↩nf+`⊸⊏0∾¬nm # Don't treat module as namespace + 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‿4⋄xm←ip M 1‿3 # Assignment classes; which are definitions, exports + 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 - zic←0¨ic←id/˜icf←2(<∧|)ip⋄II←∾⟜(icf⊸/)∘id # Imports have class 3, 5, or 7 - il←ic⊏+`br<0⋄ex←il⊏(/∾≠)b # Block for each import and its end index # Order every referenced identifier, an extraction for each import, and an undeclaration for each declaration - ixf←(((1=ip)+⊏⟜(¯1∾b/gf))∾(il∾d⊸/)⊏((≠𝕩)∾c⊏gf)˜)id⊏fi # First order by block index, open for real and closed for virtual - d∾↩zic⋄idv∾↩icf/idv # Add in imports + 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⊸/)II) ¬ixx∨○(»⊸≠𝕩⊸⊏)ixf} (≠d)⊸≤⊸/ig + {"Redefinition"_err_(𝕩⊏·∾⟜(d⊸/)ID) ¬ixx∨○(»⊸≠𝕩⊸⊏)ixf} (≠d)⊸≤⊸/ig ig↩<⟜(≠d)⊸/(⍋+`∘⊏⟜(d∾-/˜d))⊸⊏ig # Last order by declaration depth - d⊏˜↩ig⋄idv⊏˜↩ig⋄II↩ig⊏II - ("Undefined identifier"Pl/)_err_(II) d<»⊸≠idv - idx←idg⊔(⍋d/ig)⊏d(/≥1↓PN)0ib,3¨ed,ex≠⊸(«-⊢)ed,14¨ed⟩ # and bytecode + uu←ip(((1«d)∧0=⊣)∧d(⊣+`⊸⊏PN)0<⊢)⌾(ig⊸⊏)idd# Unused marker + idor←∾3⥊∨|)ps(⊢-T)+`¬ro # Train argument (first-level) -- cgit v1.2.3