ref: 57114efd8d6aadc94466e0a8ff26fa613d9c3e8f
parent: ceded833e958aa9f7c0c0642f09cd7942b02158b
	author: Ori Bernstein <orib@google.com>
	date: Thu Oct 18 12:04:34 EDT 2012
	
Don't bail early in tyfreshen()
    Because structs aren't generics, and have no subs, we
    were returning them instead of trying to freshen them.
--- a/parse/infer.c
+++ b/parse/infer.c
@@ -124,9 +124,10 @@
Type *ret;
size_t i;
+ st->ingeneric++;
t = tf(st, t);
- if (t->type != Typaram && t->nsub == 0)
- return t;
+ st->ingeneric--;
+
     switch (t->type) {case Typaram:
if (hthas(ht, t->pname))
@@ -149,9 +150,13 @@
             die("Freshening unions is not yet implemented");break;
default:
- ret = tydup(t);
- for (i = 0; i < t->nsub; i++)
- ret->sub[i] = tyspecialize(st, ht, t->sub[i]);
+            if (t->nsub > 0) {+ ret = tydup(t);
+ for (i = 0; i < t->nsub; i++)
+ ret->sub[i] = tyspecialize(st, ht, t->sub[i]);
+            } else {+ ret = t;
+ }
break;
}
return ret;
--
⑨