blob: 7cc78fd179d92478f9b0efa5d69c330be4f501f2 [file] [log] [blame]
/**** emitter.c *******************************************************/
#include "global.h"
void emit(int t, int tval, float rval) /* generates output */
{
if (ErrorFlag)
return;
++NumberC;
if (NumberC >= 8)
{
printf("\n");
NumberC = 0;
} /* end if NumberC */
switch(t) {
case RADD:
printf("RADD, ");
break;
case ADD:
printf("ADD, ");
break;
case RSUB:
printf("RSUB, ");
break;
case SUB:
printf("SUB, ");
break;
case RMUL:
printf("RMUL, ");
break;
case MUL:
printf("MUL, ");
break;
case RDIV:
printf("RDIV, ");
break;
case DIV:
printf("DIV, ");
break;
case PUSH_LOC_VAR_ADDR:
printf("'%s#%d, ", LocalTable[tval].lexptr, Scope);
break;
case PUSH_GLO_VAR_ADDR:
printf("'%s#0, ", GlobalTable[tval].lexptr);
break;
case WRITEI:
printf("WRITEI, ");
break;
case WRITEF:
printf("WRITER, ");
break;
case WRITELN:
printf("NEWLINE, ");
break;
case STORE:
printf("ST, ");
break;
case IST:
printf("IST, ");
break;
case STH:
printf("STH, ");
break;
case VAL:
printf("VAL, ");
break;
case VALB:
printf("VALB, ");
break;
case PUSH_GLO_VAR_VALUE:
printf("@%s#0, ",GlobalTable[tval].lexptr);
break;
case PUSH_LOC_VAR_VALUE:
printf(">%s#%d, ", LocalTable[tval].lexptr, Scope);
break;
case READ:
printf("READ, ");
break;
case NUM:
printf("%d, ", tval);
break;
case RNUM:
printf("%16.4e, ", rval);
break;
case GLO_DECL: /* here tval is a subscript to the symbol table */
printf("%s#0 = %d, ", GlobalTable[tval].lexptr, DecCount);
break;
case LOC_DECL:
printf("%s#%d = %d, ", LocalTable[tval].lexptr, Scope, offset);
break;
case NEG:
printf("NEG, ");
break;
case RNEG:
printf("RNEG, ");
break;
case INT:
printf("FIX, ");
break;
case FLOAT:
printf("FLOAT, ");
break;
case POP:
printf("POP, ");
break;
case LABEL_CODE:
printf("$%d: ", tval);
break;
case PUSH_CODE_LABEL:
printf("$%d, ", tval);
break;
case COMP:
printf("COMP, ");
break;
case SWAP:
printf("SWAP, ");
break;
case BEQ:
printf("BEQ, ");
break;
case BNE:
printf("BNE, ");
break;
case B:
printf("B, ");
break;
case STHB:
printf("STHB, ");
break;
case LABEL_FUNC:
printf("%s: ", GlobalTable[tval].lexptr);
break;
case ISTB:
printf("ISTB, ");
break;
case STORE_RA:
printf("RA%s = 0, ", GlobalTable[tval].lexptr);
printf("'RA%s, ", GlobalTable[tval].lexptr);
printf("istb, ");
break;
case SAVE_FRAMESIZE:
printf("frame%s = %d, ", GlobalTable[tval].lexptr, offset);
break;
case PUSH_FRAMESIZE:
printf("'frame%s, ", GlobalTable[tval].lexptr);
break;
case IB:
printf("IB, ");
break;
case DB:
printf("DB, ");
break;
case PUSH_RA:
printf(">RA%s, ", GlobalTable[tval].lexptr);
break;
case BEGIN:
printf("\n%%%d, START: $3, sb, $2, $1, b,\n", DecCount);
NumberC = 0;
break;
case END:
printf("\n$2: STOP, $3: ->START.\n");
break;
case NOTDEC:
printf("\n Function %s called but not parsed.\n",GlobalTable[tval].lexptr);
break;
default:
printf("token %d, tval %d, rval %f\n", t, tval, rval);
}
}