else
DCL_PTR_CONST (newSym->type) = 1;
SPEC_STAT(newSym->etype)=1;
- resolveIvalSym(newSym->ival);
+ resolveIvalSym(newSym->ival, newSym->type);
// add it to the "XINIT (CODE)" segment
addSet(&xinit->syms, newSym);
ival = initAggregates (sym, sym->ival, NULL);
} else {
if (getNelements(sym->type, sym->ival)>1) {
- werror (W_EXCESS_INITIALIZERS, "scalar",
- sym->name, sym->lineDef);
+ werrorfl (filename, sym->lineDef, W_EXCESS_INITIALIZERS, "scalar",
+ sym->name);
}
ival = newNode ('=', newAst_VALUE (symbolVal (sym)),
- decorateType (resolveSymbols (list2expr (sym->ival))));
+ decorateType (resolveSymbols (list2expr (sym->ival)), RESULT_CHECK));
}
codeOutFile = statsg->oFile;
else {
int size = getSize (sym->type);
if (size==0) {
- werror(E_UNKNOWN_SIZE,sym->name);
+ werrorfl (filename, sym->lineDef, E_UNKNOWN_SIZE, sym->name);
}
/* allocate space */
if (options.debug) {
return val;
}
wrong:
- werror (E_INCOMPAT_PTYPES);
+ if (expr)
+ werrorfl (expr->filename, expr->lineno, E_INCOMPAT_PTYPES);
+ else
+ werror (E_INCOMPAT_PTYPES);
return NULL;
}
while (len && pplen < plen)
{
i = 60;
- while (i && *s && pplen < plen)
+ while (i && pplen < plen)
{
if (*s < ' ' || *s == '\"' || *s=='\\')
{
else
len = 0;
}
- tfprintf (ofile, "\t!db !constbyte\n", 0);
+ while (pplen < plen)
+ {
+ tfprintf (ofile, "\t!db !constbyte\n", 0);
+ pplen++;
+ }
}
/*-----------------------------------------------------------------*/
sflds = SPEC_STRUCT (type)->fields;
if (ilist->type != INIT_DEEP) {
- werror (E_INIT_STRUCT, sym->name);
+ werrorfl (filename, sym->lineDef, E_INIT_STRUCT, sym->name);
return;
}
}
}
if (iloop) {
- werror (W_EXCESS_INITIALIZERS, "struct", sym->name, sym->lineDef);
+ werrorfl (filename, sym->lineDef, W_EXCESS_INITIALIZERS, "struct", sym->name);
}
return;
}
printIvalChar (sym_link * type, initList * ilist, FILE * oFile, char *s)
{
value *val;
- int remain;
if (!s)
{
printChar (oFile, SPEC_CVAL (val->etype).v_char, DCL_ELEM (type));
- if ((remain = (DCL_ELEM (type) - strlen (SPEC_CVAL (val->etype).v_char) - 1)) > 0)
- while (remain--)
- tfprintf (oFile, "\t!db !constbyte\n", 0);
-
return 1;
}
else
/* by a string */
if (IS_CHAR (type->next)) {
if (!IS_LITERAL(list2val(ilist)->etype)) {
- werror (E_CONST_EXPECTED);
+ werrorfl (filename, ilist->lineno, E_CONST_EXPECTED);
return;
}
if (printIvalChar (type,
/* not the special case */
if (ilist->type != INIT_DEEP)
{
- werror (E_INIT_STRUCT, sym->name);
+ werrorfl (filename, ilist->lineno, E_INIT_STRUCT, sym->name);
return;
}
printIval (sym, type->next, iloop, oFile);
if (++size > DCL_ELEM(type)) {
- werror (W_EXCESS_INITIALIZERS, "array", sym->name, sym->lineDef);
+ werrorfl (filename, sym->lineDef, W_EXCESS_INITIALIZERS, "array", sym->name);
break;
}
}
if (IS_LITERAL(val->etype)) {
if (compareType(type,val->etype)==0) {
- werror (E_INCOMPAT_TYPES);
+ werrorfl (filename, ilist->lineno, E_INCOMPAT_TYPES);
printFromToType (val->type, type);
}
printIvalCharPtr (NULL, type, val, oFile);
case 3:
if (IS_GENPTR(type) && floatFromVal(val)!=0) {
// non-zero mcs51 generic pointer
- werror (E_LITERAL_GENERIC);
+ werrorfl (filename, sym->lineDef, E_LITERAL_GENERIC);
}
if (port->little_endian) {
fprintf (oFile, "\t.byte %s,%s,%s\n",
case 4:
if (IS_GENPTR(type) && floatFromVal(val)!=0) {
// non-zero ds390 generic pointer
- werror (E_LITERAL_GENERIC);
+ werrorfl (filename, sym->lineDef, E_LITERAL_GENERIC);
}
if (port->little_endian) {
fprintf (oFile, "\t.byte %s,%s,%s,%s\n",
/* check the type */
if (compareType (type, val->type) == 0) {
- werror (W_INIT_WRONG);
+ werrorfl (filename, ilist->lineno, W_INIT_WRONG);
printFromToType (val->type, type);
}
if (!ilist)
return;
- /* update line number for error msgs */
- lineno=sym->lineDef;
-
/* if structure then */
if (IS_STRUCT (type))
{
if (ilist->type!=INIT_NODE) {
// or a 1-element list
if (ilist->init.deep->next) {
- werror (W_EXCESS_INITIALIZERS, "scalar",
- sym->name, sym->lineDef);
+ werrorfl (filename, sym->lineDef, W_EXCESS_INITIALIZERS, "scalar",
+ sym->name);
} else {
ilist=ilist->init.deep;
}
IS_PTR(type) && DCL_TYPE(type)==CPOINTER) {
// no sweat
} else {
- werror (E_TYPE_MISMATCH, "assignment", " ");
+ werrorfl (filename, ilist->lineno, E_TYPE_MISMATCH, "assignment", " ");
printFromToType(itype, type);
}
}
{
fprintf (out, "%s:\n", sym->rname);
noAlloc++;
- resolveIvalSym (sym->ival);
+ resolveIvalSym (sym->ival, sym->type);
printIval (sym, sym->type, sym->ival, out);
noAlloc--;
/* if sym is a simple string and sym->ival is a string,
int size = getSize (sym->type);
if (size==0) {
- werror(E_UNKNOWN_SIZE,sym->name);
+ werrorfl (filename, sym->lineDef, E_UNKNOWN_SIZE,sym->name);
}
fprintf (out, "%s:\n", sym->rname);
/* special case for character strings */
SPEC_CVAL (sym->etype).v_char)
printChar (out,
SPEC_CVAL (sym->etype).v_char,
- strlen (SPEC_CVAL (sym->etype).v_char) + 1);
+ size);
else
tfprintf (out, "\t!ds\n", (unsigned int) size & 0xffff);
}
fprintf (vFile, "\tljmp\t__sdcc_gsinit_startup\n");
-
/* now for the other interrupts */
for (; i < maxInterrupts; i++)
{
if (interrupts[i])
- fprintf (vFile, "\tljmp\t%s\n\t.ds\t5\n", interrupts[i]->rname);
+ {
+ fprintf (vFile, "\tljmp\t%s\n", interrupts[i]->rname);
+ if ( i != maxInterrupts - 1 )
+ fprintf (vFile, "\t.ds\t5\n");
+ }
else
- fprintf (vFile, "\treti\n\t.ds\t7\n");
+ {
+ fprintf (vFile, "\treti\n");
+ if ( i != maxInterrupts - 1 )
+ fprintf (vFile, "\t.ds\t7\n");
+ }
}
}
}
int size = getSize(sym->type);
if (size==0) {
- werror(E_UNKNOWN_SIZE,sym->name);
+ werrorfl (filename, sym->lineDef, E_UNKNOWN_SIZE);
}
if (options.debug)
fprintf (afile, "==.\n");