diff options
-rw-r--r-- | parse/infer.c | 10 | ||||
-rw-r--r-- | test/pkgtrait.myr | 13 | ||||
-rw-r--r-- | test/tests | 1 |
3 files changed, 20 insertions, 4 deletions
diff --git a/parse/infer.c b/parse/infer.c index 83690cc..daa3727 100644 --- a/parse/infer.c +++ b/parse/infer.c @@ -895,11 +895,13 @@ tryconstrain(Type *base, Trait *tr) if (tymatchrank(tm->filter[i], ty) >= 0) return 1; } - if (!tm->sub[ty->type]) - break; assert(ty->nsub == 1); - tm = tm->sub[ty->type]; + if (!ty->sub) + break; ty = ty->sub[0]; + tm = tm->sub[ty->type]; + if (!tm) + break; } if (base->type != Tyname) break; @@ -2813,7 +2815,7 @@ addtraittab(Traitmap *m, Trait *tr, Type *ty) size_t i; if (!m->sub[ty->type]) - m = mktraitmap(); + m->sub[ty->type] = mktraitmap(); mm = m->sub[ty->type]; switch (ty->type) { case Tygeneric: diff --git a/test/pkgtrait.myr b/test/pkgtrait.myr new file mode 100644 index 0000000..7825937 --- /dev/null +++ b/test/pkgtrait.myr @@ -0,0 +1,13 @@ +use std +use regex + +impl disposable regex.regex# = + __dispose__ = {r + regex.free(r) + } +;; + +const main = { + var auto r : regex.regex# + r = std.try(regex.compile(".*")) +} @@ -86,6 +86,7 @@ B multistr E 0 B generic E 42 B genericval E 42 B trait-builtin E 42 +B pkgtrait E 42 B gtrait P '`std.Before ' B emptytrait E 123 B traitimpl P 246,44,meee |