int iTempLblNum = 0;
int operandKey = 0;
int iCodeKey = 0;
-char *filename;
-int lineno;
+char *filename; /* current file name */
+int lineno = 1; /* current line number */
int block;
int scopeLevel;
int seqPoint;
dbuf_append_char (dbuf, '\t');
dbuf_printf (dbuf, "%s\t", s);
dbuf_printOperand (IC_JTCOND (ic), dbuf);
- dbuf_append_char (dbuf, '\n');
for (sym = setFirstItem (IC_JTLABELS (ic)); sym;
sym = setNextItem (IC_JTLABELS (ic)))
- dbuf_printf (dbuf, "\t\t\t%s\n", sym->name);
+ dbuf_printf (dbuf, "; %s", sym->name);
+ dbuf_append_char (dbuf, '\n');
}
PRINTFUNC (picGeneric)
dbuf_printf (dbuf, " == 0 goto %s($%d)\n", IC_FALSE (ic)->name, IC_FALSE (ic)->key);
else
{
- dbuf_printf (dbuf, " != 0 goto %s($%d)\n", IC_TRUE (ic)->name, IC_TRUE (ic)->key);
+ dbuf_printf (dbuf, " != 0 goto %s($%d)", IC_TRUE (ic)->name, IC_TRUE (ic)->key);
if (IC_FALSE (ic))
- dbuf_printf (dbuf, "\tzzgoto %s\n", IC_FALSE (ic)->name);
+ dbuf_printf (dbuf, "; zzgoto %s\n", IC_FALSE (ic)->name);
+ dbuf_append_char (dbuf, '\n');
}
}
dbuf_init(&dbuf, 1024);
icTab->iCodePrint (&dbuf, loop, icTab->printName);
dbuf_write_and_destroy (&dbuf, of);
+ ////
+ fflush(of);
}
}
}
ic->supportRtn = 1;
ic->nosupdate = nosupdate;
- return left;
+ /* left could be a pointer assignment,
+ return the properly casted right instead */
+ return right;
}
/*-----------------------------------------------------------------*/
case GETHBIT:
{
operand *op = geniCodeUnary (geniCodeRValue (left, FALSE), tree->opval.op);
- setOperandType (op, UCHARTYPE);
+ if (!IS_BIT (operandType (op)))
+ setOperandType (op, UCHARTYPE);
return op;
}
case GETABIT:
+ {
+ operand *op = geniCodeBinary (geniCodeRValue (left, FALSE),
+ geniCodeRValue (right, FALSE),
+ tree->opval.op);
+ if (!IS_BIT (operandType (op)))
+ setOperandType (op, UCHARTYPE);
+ return op;
+ }
case GETBYTE:
+ {
+ operand *op = geniCodeBinary (geniCodeRValue (left, FALSE),
+ geniCodeRValue (right, FALSE),
+ tree->opval.op);
+ setOperandType (op, UCHARTYPE);
+ return op;
+ }
case GETWORD:
{
operand *op = geniCodeBinary (geniCodeRValue (left, FALSE),
geniCodeRValue (right, FALSE),
tree->opval.op);
- setOperandType (op, (tree->opval.op == GETWORD) ? UINTTYPE : UCHARTYPE);
+ setOperandType (op, UINTTYPE);
return op;
}
case AND_OP:
case NE_OP:
/* different compilers (even different gccs) evaluate
the two calls in a different order. to get the same
- result on all machines we've to specify a clear sequence.
+ result on all machines we have to specify a clear sequence.
return geniCodeLogic (geniCodeRValue (left, FALSE),
geniCodeRValue (right, FALSE),
tree->opval.op);
else
right = geniCodeRValue (right, FALSE);
- geniCodeAssign (left, right, 0, 1);
- return right;
+ return geniCodeAssign (left, right, 0, 1);
}
case MUL_ASSIGN:
return