From f6c8a4954230737321e6eeedd07b7a356b8bee36 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Fri, 12 Nov 2021 16:54:04 -0500 Subject: Handle cross-program namespace access in vm.bqn --- vm.bqn | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/vm.bqn b/vm.bqn index c6a876f0..052ef1a2 100644 --- a/vm.bqn +++ b/vm.bqn @@ -1,4 +1,4 @@ -MakeVar ← { 𝕊 name: +MakeVar ← { program 𝕊 name: v←@ Get ⇐ !∘"Runtime: Variable referenced before definition" SetU ⇐ !∘"↩: Variable modified before definition" @@ -12,18 +12,18 @@ MakeVar ← { 𝕊 name: Get↩SetU↩SetN↩!∘"Internal error: Variable used after clear" r } - GetF ⇐ {𝕩.Field name} # TODO no env.program access + GetF ⇐ {program 𝕩.Field name} } MakeEnv ← { 𝕊p‿v‿n‿e: ns ← v-≠n # Number of special names - vars ⇐ MakeVar¨ (ns⥊¯1) ∾ n parent ⇐ p program ⇐ p.program + vars ⇐ program⊸MakeVar¨ (ns⥊¯1) ∾ n MakeNS ⇐ {𝕤 v ← @ ⊣´¨ n ⊔ ns↓vars # Lookup table Field ⇐ {𝕨𝕊i: - ! program ≡ 𝕨 # TODO cross-program handling - i ⊑ v + cross ← 𝕨 { 𝕨1⊘≡𝕩 ? ⊢ ; ⊑ 𝕩.names ⊐ ⊏⟜𝕨.names } program + (Cross i) ⊑ v } } } @@ -174,10 +174,11 @@ RunBC ← { bc‿pos‿env: Inner Outer {parent˙ 𝕏 ⊢}¨ run } }¨ blockInfo - + program ← { consts⇐consts blocks⇐blocks + names⇐0⊑2⊑token } (⊑blocks){𝔽} {program⇐program} -- cgit v1.2.3