]> git.lizzy.rs Git - metalua.git/blobdiff - src/lib/metalua/walk/id.mlua
... now captures what it matches in patterns, and can be used to render it on the...
[metalua.git] / src / lib / metalua / walk / id.mlua
index 4de5f18228efa7aa9976ceaf57b4d5ee7ec9ad6e..5e457e80dbdcade8d1d65a7cb0187397a46310f3 100644 (file)
@@ -85,15 +85,16 @@ local function _walk_id (kind, supercfg, ast, ...)
          local r = supercfg.expr.down(x, ...)
          if r then return r end
       end
+      local parents = {...}
       match x with
       | `Id{ name } ->
          local binder, r = scope.current[name] -- binder :: ast which bound var
          if binder then 
             --$log( 'walk.id found a bound var:', x, binder)
-            r = visit_bound_var(x, binder, ...)
+            r = visit_bound_var(x, binder, unpack(parents))
          else 
             --$log( 'walk.id found a free var:', x, scope.current)
-            r = visit_free_var(x, ...) 
+            r = visit_free_var(x, unpack(parents))
          end
          if r then return r end
       | `Function{ params, _ } -> scope:push (params, x)
@@ -105,7 +106,7 @@ local function _walk_id (kind, supercfg, ast, ...)
          -------------------------------------------------------------
          scope:push()
          for stat in values (block) do walk.stat(cfg, stat, x, ...) end 
-         walk.expr(cfg, expr, x, ...)
+         walk.expr(cfg, expr, x, unpack(parents))
          scope:pop()
          return 'break'
       | _ -> -- pass