From cf47fa211692297f95e9ef156766ad08bab7aed1 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Fri, 7 Aug 2020 16:46:07 -0400 Subject: [PATCH] debugging free variable detection. It is still very broken. I do not know why --- dyn.src | 2 ++ lib/dyn.rb | 11 +++++++++++ 2 files changed, 13 insertions(+) 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 -- 2.49.0