All pastes #87093 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-07-13 16:44 UTC
rendered paste body
char *op_unknown = "unknown";

char *optypenames[] = 
{
	op_unknown,
	op_unknown,
	"jump",
	op_unknown,
	op_unknown,
	"local",
	"global",
	"constant",
	"pop",
	op_unknown,
	op_unknown, // 10
	op_unknown,
	"eval",
	"retval",
	"getvar",
	op_unknown,
	"getvar[]",
	"setvar",
	"setvar[]",
	"push",
	"setarg2?",
	"callnative",
	"callfunc",
	"typecast",
	op_unknown,
	op_unknown,
	op_unknown,
	op_unknown,
	op_unknown,
	op_unknown,
	op_unknown,
	op_unknown,
	"add\t",
	"subtract",
	"multiply",
	"divide",
	op_unknown,
	"negate",
	"bnot",
	"return",
	"jmptruebooleannor",
	"jmpfalsebooleanand",
	op_unknown,
	op_unknown,
	op_unknown
};

void __stdcall JassVMSwitchTableHook(JassInstance *inst)
{
	if (true)
	{
		JassOpcode *op = inst->op;
		CompilerInstance *comp = inst->comp;
		char *symname;
		char msg[200];
		switch (op->type)
		{
		case 0x05:
		case 0x06:
		case 0x07:
		case 0x08:
		//case 0x0c: // symbolid for eval is actually the value we are evaluating
		case 0x0e:
		case 0x0f:
		case 0x10:
		case 0x11:
		//case 0x13: // always displays a null string for push opcode??
		case 0x15:
		case 0x16:
		case 0x28:
		case 0x29:
		case 0x2a:
		case 0x2b:
			__asm
			{
				mov ecx, comp
				mov eax, op
				mov eax, dword ptr ds:[eax + 4]
				push eax
				mov eax, 0x6f69dfe0
				call eax
				mov symname, eax
			}
			fprintf(f, "%.2x %.2x %.2x  %2x:%-20s %s\n", op->UnknownArrayThing, op->UnknownParam1, op->UnknownParam2, op->type, optypenames[op->type], symname);
			break;
		default:
			fprintf(f, "%.2x %.2x %.2x  %2x:%-20s %.8x\n", op->UnknownArrayThing, op->UnknownParam1, op->UnknownParam2, op->type, optypenames[op->type], op->symbolid);
			break;
		}
		//if (show_em)
		//	GamePrintUIMessage(msg, 10.0f, 0xFFFFFFFF);
		//std::cout << msg;
	}
}