From: Michael D. Lowis Date: Fri, 7 Aug 2020 20:46:07 +0000 (-0400) Subject: debugging free variable detection. It is still very broken. I do not know why X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=cf47fa211692297f95e9ef156766ad08bab7aed1;p=proto%2Fsclpl-rb.git debugging free variable detection. It is still very broken. I do not know why --- diff --git a/dyn.src b/dyn.src index d082790..e8d96d8 100644 --- a/dyn.src +++ b/dyn.src @@ -35,6 +35,8 @@ # 42 #} +a = 1 + add : int -> int add = fun(a, b) { a + b diff --git a/lib/dyn.rb b/lib/dyn.rb index 5f568ca..2529218 100755 --- a/lib/dyn.rb +++ b/lib/dyn.rb @@ -94,6 +94,11 @@ class SymTable < Hash def annotation(key) (method(:[]).super_method.call(key) || {})[:ann] end + + def stack() + parent = (@parent.is_a?(SymTable) ? @parent.stack : []) + ([self] + parent).flatten + end end class Lexer @@ -640,6 +645,7 @@ module TypeChecker end env.freevars = (env.freevars + newenv.freevars).uniq pp "free", env.freevars + pp env.stack types.last end @@ -827,11 +833,16 @@ a = 123 foo : int -> int foo = fun(b){ + d = 123 bar : int -> int bar = fun(c){ a + b + c } bar(1) + d + e = 1 + e + d } eos