2026-08-03 21:01:34 +10:00
|
|
|
#include "instruction.h"
|
|
|
|
|
|
|
|
|
|
char* gravityOpcodeToCStr(GravityOpcode opcode) {
|
|
|
|
|
switch (opcode) {
|
|
|
|
|
case GravityOpcodeAlloc: return "alloc";
|
|
|
|
|
case GravityOpcodeStore: return "store";
|
|
|
|
|
case GravityOpcodeLoad: return "load";
|
2026-08-03 21:24:29 +10:00
|
|
|
case GravityOpcodeRet: return "ret";
|
2026-08-04 10:10:49 +10:00
|
|
|
case GravityOpcodeJumpIf: return "jumpif";
|
|
|
|
|
case GravityOpcodeJump: return "jump";
|
|
|
|
|
case GravityOpcodeIntConst: return "iconst";
|
2026-08-03 21:01:34 +10:00
|
|
|
default: return "fixme";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char* gravityInstructionToCStr(GravityInstruction inst) {
|
|
|
|
|
StringBuffer buff;
|
|
|
|
|
initStringBuff(&buff);
|
|
|
|
|
|
|
|
|
|
if (inst.result != NULL) {
|
|
|
|
|
sbAppend(&buff, "%s = ", gravityValueToCStr(inst.result));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sbAppend(&buff, "%s ", gravityOpcodeToCStr(inst.opcode));
|
|
|
|
|
for (unsigned int i = 0; i < inst.numOperands; i++) {
|
|
|
|
|
if (i < inst.numOperands - 1) {
|
|
|
|
|
sbAppend(&buff, "%s, ", gravityValueToCStr(inst.operands[i]));
|
|
|
|
|
} else {
|
|
|
|
|
sbAppend(&buff, "%s", gravityValueToCStr(inst.operands[i]));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return buff.data;
|
|
|
|
|
}
|