+ // not an aggregate, ilist must be a node
+ if (ilist->type!=INIT_NODE &&
+ // or a 1-element list
+ ilist->init.deep->next) {
+ werror (W_EXCESS_INITIALIZERS, "scalar",
+ sym->name, sym->lineDef);
+ }
+
+ // and the type must match
+ val=list2val(ilist);
+ if (compareType(type, val->type)==0) {
+ // special case for literal strings
+ if (IS_ARRAY (val->type) && IS_CHAR (val->etype) &&
+ // which are really code pointers
+ IS_PTR(type) && DCL_TYPE(type)==CPOINTER) {
+ // no sweat
+ } else {
+ werror (E_TYPE_MISMATCH, "assignment", " ");
+ printFromToType(list2val(ilist)->type, type);
+ }
+ }
+
+ /* if this is a pointer */
+ if (IS_PTR (type))