- for (b = cast(binode, b->left); b; b = cast(binode, b->right)) {
- struct var *v = cast(var, b->left);
- if (!v->var->type) {
- v->var->where_set = b;
- v->var->type = Tstr;
+ argv_type = add_type(c, argv_type_name, &array_prototype);
+ argv_type->array.member = Tstr;
+
+ for (b = cast(binode, bp->left); b; b = cast(binode, b->right)) {
+ struct var *v;
+ ok = 1;
+ switch (arg++) {
+ case 0: /* argc */
+ v = cast(var, b->left);
+ argv_type->array.vsize = v->var;
+ propagate_types(b->left, c, &ok, Tnum, 0);
+ break;
+ case 1: /* argv */
+ propagate_types(b->left, c, &ok, argv_type, 0);
+ break;
+ default: /* invalid */
+ propagate_types(b->left, c, &ok, Tnone, 0);