return;
if (sc == EXTERN && expr && !is_anon_idf(idf))
error("%s is extern; cannot initialize", idf->id_text);
-#ifndef PREPEND_SCOPES
- if (def->df_type->tp_fund == FUNCTION) {
- code_scope(idf->id_text, def);
- }
-#endif PREPEND_SCOPES
if (lvl == L_GLOBAL) { /* global variable */
/* is this an allocating declaration? */
if ( (sc == 0 || sc == STATIC)
case GLOBAL:
case IMPLICIT:
/* we are sure there is no expression */
-#ifndef PREPEND_SCOPES
- code_scope(idf->id_text, def);
-#endif PREPEND_SCOPES
break;
case AUTO:
case REGISTER:
char *strncpy();
extern char options[];
static int gen_error;
+static int pack_level;
struct type **gen_tphead(), **gen_tpmiddle();
struct sdef *gen_align_to_next();
struct e_stack *p_stack;
;
initial_value_pack(struct type **tpp; struct expr **expp;)
- { static int pack_level; }
:
'{'
{ if (pack_level == 0) gen_error = 0; pack_level++; }
p_stack = p;
}
}
+ if (pack_level < gen_error) gen_error = 0;
}
'}'
;
switch((tp = *tpp)->tp_fund) {
case ARRAY:
if (! valid_type(tp->tp_up, "array element"))
- gen_error = 1;
+ gen_error = pack_level;
break;
case STRUCT:
if (! valid_type(tp, "struct"))
- gen_error = 1;
+ gen_error = pack_level;
break;
case UNION:
if (! union_allowed) {
error("union initialisation not allowed");
- gen_error = 1;
+ gen_error = pack_level;
break;
}
if (! valid_type(tp, "union"))
- gen_error = 1;
+ gen_error = pack_level;
break;
}
}
check_and_pad(expp, tpp);
break;
case ERRONEOUS:
- gen_error = 1;
+ gen_error = pack_level;
break;
default:
check_ival(expp, tp);
register struct sdef *sd;
if (tpp && *tpp == error_type) {
- gen_error = 1;
+ gen_error = pack_level;
return 0;
}
if (gen_error) return tpp;
#endif
if (! sd) {
/* something wrong with this struct */
- gen_error = 1;
+ gen_error = pack_level;
p_stack = p->next;
free_e_stack(p);
return 0;
free_e_stack(p_stack);
p_stack = p;
}
- gen_error = 0;
}
/* check_and_pad() is given a simple initialisation expression
struct expr *ex;
{
expr_error(ex, "illegal initialisation constant");
- gen_error = 1;
+ gen_error = pack_level;
}
too_many_initialisers()
{
error("too many initialisers");
- gen_error = 1;
+ gen_error = pack_level;
}
}