}
skip_token (':');
+ if ( sbc->type == SBC_ARRAY && token == T_ID )
+ {
+ spec->varname = xstrdup (st_lower (tokstr));
+ spec->index = sbc->narray;
+ sbc->narray++;
+ }
+
+
+
/* Parse all the settings. */
{
setting **s = &spec->s;
sbc->type = SBC_ARRAY;
parse_specifiers (sbc);
+
}
else
{
specifier *spec;
for (spec = sbc->spec; spec; spec = spec->next)
- if (!spec->s)
dump (0, "%s%s%s = %d,",
st_upper (prefix), st_upper (sbc->prefix),
st_upper (spec->varname), spec->index);
spec->varname);
else if (f == 0)
{
- dump (0, "int a_%s[%d];",
- st_lower (sbc->name), sbc->narray);
+ dump (0, "int a_%s[%s%scount];",
+ st_lower (sbc->name),
+ st_upper (prefix),
+ st_upper (sbc->prefix)
+ );
+
f = 1;
}
}
dump (1, "%sif (%s)", first ? "" : "else ",
make_match (s->specname));
+
/* Handle values. */
if (s->value == VAL_NONE)
dump (0, "p->%s%s = %s%s;", sbc->prefix, spec->varname,
dump (1, "{");
if (spec->varname)
- dump (0, "p->%s%s = %s%s;", sbc->prefix, spec->varname,
- st_upper (prefix), find_symbol (s->con)->name);
-
+ {
+ dump (0, "p->%s%s = %s%s;", sbc->prefix, spec->varname,
+ st_upper (prefix), find_symbol (s->con)->name);
+
+ if ( sbc->type == SBC_ARRAY )
+ dump (0, "p->a_%s[%s%s%s] = 1;",
+ st_lower (sbc->name),
+ st_upper (prefix), st_upper (sbc->prefix),
+ st_upper (spec->varname));
+ }
+
+
if (s->valtype == VT_PAREN)
{
if (s->optvalue)
{
dump (0, "p->%sv_%s = parse_variable ();",
st_lower (sbc->prefix), st_lower (sbc->name));
- dump (1, "if (p->%sv_%s)",
+ dump (1, "if (!p->%sv_%s)",
st_lower (sbc->prefix), st_lower (sbc->name));
dump (0, "goto lossage;");
outdent ();
dump (0, " Generated by q2c from %s on %s.", ifn, timep);
dump (0, " Do not modify!");
dump (0, " */");
-
- dump (0, nullstr);
- dump (0, "#include \"settings.h\"");
- dump (0, "#include \"subclist.h\"");
- dump (0, nullstr);
}
/* Write out commands to free variable state. */
dump (0, "free (p->s_%s);", st_lower (sbc->name));
break;
case SBC_DBL_LIST:
- dump (0, "subc_list_double_destroy(p->dl_%s);", st_lower (sbc->name));
+ dump (0, "int i;");
+ dump (1, "for(i = 0; i < MAXLISTS ; ++i)");
+ dump (0, "subc_list_double_destroy(&p->dl_%s[i]);", st_lower (sbc->name));
+ outdent();
break;
default:
break;
dump (0, "#include \"alloc.h\"");
dump (0, "#include \"error.h\"");
dump (0, "#include \"lexer.h\"");
+ dump (0, "#include \"settings.h\"");
dump (0, "#include \"str.h\"");
+ dump (0, "#include \"subclist.h\"");
dump (0, "#include \"var.h\"");
dump (0, nullstr);