/* create quadruple representing instruction */ void gen3ai(OPCODE op_code,SYM_ENTRY* arg1, SYM_ENTRY* arg2, SYM_ENTRY* result) { DEBUG("Function: %s --- File: %s \n ", __func__, __FILE__); // allocate memory for this instruction INSTRUCTION* inst = fmalloc(sizeof(INSTRUCTION)); // populate the instruction inst->op_code = op_code; inst->args[0] = arg1; inst->args[1] = arg2; inst->result = result; // Then put it in the instruction memory instruction_memory_insert(inst); printf("%d. ", current3ai()); /* print the index */ switch(op_code) { case A2PLUS: print3ai("+", arg1,arg2,result); break; case A2MINUS: print3ai("-", arg1,arg2,result); break; case A2TIMES: print3ai("*", arg1,arg2,result); break; case A2DIVIDE: print3ai("/", arg1,arg2,result); break; case A0: print3ai(" ", arg1,arg2,result); break; case IFEQ: printIf("==", arg1, arg2, result); break; case IFNEQ: printIf("!=", arg1, arg2, result); break; case IFGT: printIf(">", arg1, arg2, result); break; case IFLT: printIf("<", arg1, arg2, result); break; case A1NOT: print3ai("!", arg1,arg2,result); break; case GOTO: printGOTO("GOTO",arg1, arg2, result); break; case PARAM: printParam("PARAM",result); break; case CALL: printParam("CALL",result); break; } }
void printStmtList (struct STMT *st) { if (st == NULL) { //fprintf (stderr, "Statement list does not exist.\n"); return; } if (st->prev != NULL) printStmtList (st->prev); if (st->s == eAssign) { printAssi (st->stmt.assign_); fprintf (fp, ";\n"); } else if (st->s == eCall) { printCall (st->stmt.call_); fprintf (fp, ";\n"); } else if (st->s == eRet) { printRet (st->stmt.return_); fprintf (fp, ";\n"); } else if (st->s == eWhile) { printWhil (st->stmt.while_); fprintf (fp, "\n"); } else if (st->s == eFor) { printFor (st->stmt.for_); fprintf (fp, "\n"); } else if (st->s == eIf) { printIf (st->stmt.if_); fprintf (fp, "\n"); } else if (st->s == eCompound) { printCompStmt (st->stmt.cstmt_); } else if (st->s == eSwitch) { printSwit (st->stmt.switch_); fprintf (fp, "\n"); } else fprintf (fp, ";\n"); }
void printPowerups(void) { printf("%d Power-ups:\n", g_iPowerUpCount); for(int ii = 0; ii < g_iPowerUpCount; ++ii) { printf("%10s ", g_PowerUps[ii].szName); printf("%16s ", g_PowerUps[ii].szImage); // if(g_PowerUps[ii].fHealth != 0.0) // printf("Health[%f] ", g_PowerUps[ii].fHealth); printIf(g_PowerUps[ii].iHealth, "Health[%d] "); printIf(g_PowerUps[ii].iInvulnerability, "Invulnerability[%d] "); printIf(g_PowerUps[ii].iFastMove, "FastMove[%d] "); printIf(g_PowerUps[ii].iHighJump, "HighJump[%d] "); printIf(g_PowerUps[ii].iStunPlayer, "Stun[%d] "); printIf(g_PowerUps[ii].iLifeUp, "LifeUp[%d] "); printf("\n"); } }
void ASTPrint( int lev, ASTNode node ) { if (! node) { indent( lev ); ec_stderr_printf( "NULL" ); return; } /* Simplify our lives ... */ if (currentScope) { if (currentScope->type == PackageScope) { currentPackage = currentScope->target; currentBytecode = EC_PACKAGECODE(currentScope->target); } else { currentBytecode = currentScope->target; } currentLiteral = EC_COMPILEDLFRAME(currentBytecode); } switch ( node->type ) { case nullType: indent( lev ); ec_stderr_printf( "<nullType>" ); break; case symbolType: printSymbol( lev, node ); break; case qualifiedSymbolType: printQualifiedSymbol( lev, node ); break; case constExprType: printConstant( lev, node ); break; case variableExprType: printVariable( lev, node ); break; case arrayConstructionExprType: printArrayCons( lev, node ); break; case hashConstructionExprType: printHashCons( lev, node ); break; case unaryExprType: printUnary( lev, node ); break; case binaryExprType: printBinary( lev, node ); break; case conditionalExprType: printConditional( lev, node ); break; case orExprType: printOr( lev, node ); break; case andExprType: printAnd( lev, node ); break; case assignExprType: printAssign( lev, node ); break; case simAssignExprType: printSimAssign( lev, node ); break; case arrayRefExprType: printArrayRef( lev, node ); break; case declNodeType: printDecl( lev, node ); break; case declAtomNodeType: printDeclAtom( lev, node ); break; case statementType: printStatement( lev, node ); break; case labeledStmtType: printLabeledStmt( lev, node ); break; case exprStmtType: printExprStmt( lev, node ); break; case ifStmtType: printIf( lev, node ); break; case whileStmtType: printWhile( lev, node ); break; case doStmtType: printDo( lev, node ); break; case forStmtType: printFor( lev, node ); break; case forInStmtType: printForIn( lev, node ); break; case breakStmtType: printBreak( lev, node ); break; case continueStmtType: printContinue( lev, node ); break; case gotoStmtType: printGoto( lev, node ); break; case tryStmtType: printTry( lev, node ); break; case catchStmtType: printCatch( lev, node ); break; case throwStmtType: printThrow( lev, node ); break; case importStmtType: printImport( lev, node ); break; case paramNodeType: printParam( lev, node ); break; case paramListType: printParamList( lev, node ); break; case callNodeType: printCall( lev, node ); break; case methodCallNodeType: printMethodCall( lev, node ); break; case stmtListType: printStmtList( lev, node ); break; case funcNodeType: printFunction( lev, node ); break; case returnNodeType: printReturn( lev, node ); break; case classNodeType: printClass( lev, node ); break; case methodNodeType: printMethod( lev, node ); break; case packageNodeType: printPackage( lev, node ); break; } }