diff options
-rw-r--r-- | parse/infer.c | 4 | ||||
-rw-r--r-- | parse/node.c | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/parse/infer.c b/parse/infer.c index 4298eed..daa071e 100644 --- a/parse/infer.c +++ b/parse/infer.c @@ -1930,7 +1930,7 @@ specializeimpl(Node *n) fatal(n, "%s incompatibly specialized with %zd types instead of %zd types", namestr(n->impl.traitname), n->impl.naux, tr->naux); n->impl.type = tf(n->impl.type); - pushenv(n->impl.type->env); + pushenv(n->impl.env); for (i = 0; i < n->impl.naux; i++) n->impl.aux[i] = tf(n->impl.aux[i]); for (i = 0; i < n->impl.ndecls; i++) { @@ -1997,7 +1997,7 @@ specializeimpl(Node *n) if (generic) ingeneric--; } - popenv(n->impl.type->env); + popenv(n->impl.env); } static void diff --git a/parse/node.c b/parse/node.c index 6e9a8ce..e4332f9 100644 --- a/parse/node.c +++ b/parse/node.c @@ -264,6 +264,9 @@ mkimplstmt(Srcloc loc, Node *name, Type *t, Type **aux, size_t naux, Node **decl n->impl.env = mkenv(); bindtype(n->impl.env, t); } + for (i = 0; i < naux; i++) + if (hasparams(aux[i])) + bindtype(n->impl.env, aux[i]); return n; } |