diff --git a/src/Language.ml b/src/Language.ml index 0318ba7be..cb9f0eadf 100644 --- a/src/Language.ml +++ b/src/Language.ml @@ -285,8 +285,8 @@ module Stmt = | x:IDENT {Ident x} ) - let vars p = - transform(t) (object inherit [string list] @t[foldl] method c_Ident s _ name = name::s end) [] p + let vars p = fix0 (fun f -> + transform(t) (object inherit [string list, _] @t[foldl] f method c_Ident s name = name::s end)) [] p end diff --git a/src/SM.ml b/src/SM.ml index 715ea09ae..345659d11 100644 --- a/src/SM.ml +++ b/src/SM.ml @@ -153,12 +153,13 @@ let compile (defs, p) = env, true, tag @ List.flatten (List.rev code) @ [DROP] and bindings p = let bindings = + fix0 (fun fself -> transform(Stmt.Pattern.t) - (object inherit [int list, (string * int list) list] @Stmt.Pattern.t - method c_Wildcard path _ = [] - method c_Ident path _ s = [s, path] - method c_Sexp path x _ ps = List.concat @@ List.mapi (fun i p -> x.GT.f (path @ [i]) p) ps - end) + (object inherit [int list, (string * int list) list, _] @Stmt.Pattern.t + method c_Wildcard path = [] + method c_Ident path s = [s, path] + method c_Sexp path x ps = List.concat @@ List.mapi (fun i p -> fself (path @ [i]) p) ps + end)) [] p in