debug: update runtime opcode printing
This commit is contained in:
+32
-18
@@ -70,10 +70,10 @@ extern void print_lex_token(struct lex_token *tok)
|
||||
printf("(%s)", token_keyword_to_string(tok->tok_keyword));
|
||||
break;
|
||||
case TOK_INT:
|
||||
printf("(%lld)", tok->tok_int);
|
||||
break;
|
||||
case TOK_DOUBLE:
|
||||
printf("(%lf)", tok->tok_double);
|
||||
printf("(");
|
||||
fx_value_to_string(&tok->tok_number, fx_stdout, NULL);
|
||||
printf(")");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -180,6 +180,9 @@ void print_instruction(
|
||||
enum bshell_opcode opcode = 0;
|
||||
uint32_t arg = 0;
|
||||
fx_value *pool_value = NULL;
|
||||
fx_object *obj;
|
||||
double d;
|
||||
const char *s = NULL;
|
||||
|
||||
bshell_instruction_decode(instr, &opcode, &arg);
|
||||
|
||||
@@ -187,6 +190,20 @@ void print_instruction(
|
||||
switch (opcode) {
|
||||
case OPCODE_LDC_INT:
|
||||
fx_printf("ldc.int [yellow]#0x%02x", arg);
|
||||
break;
|
||||
case OPCODE_LDC_FP:
|
||||
pool_value = bshell_scriptblock_get_pool_value(
|
||||
container,
|
||||
arg,
|
||||
FX_TYPE_DOUBLE);
|
||||
fx_printf("ldc.fp [cyan]@0x%02x ", arg);
|
||||
if (pool_value) {
|
||||
fx_value_get_double(pool_value, &d);
|
||||
fx_printf("[reset][[[yellow]%g[reset]]", d);
|
||||
} else {
|
||||
fx_printf("[red]<INVALID>[reset]");
|
||||
}
|
||||
|
||||
break;
|
||||
case OPCODE_LDC_STR:
|
||||
pool_value = bshell_scriptblock_get_pool_value(
|
||||
@@ -201,9 +218,8 @@ void print_instruction(
|
||||
}
|
||||
fx_printf("ldc.str [cyan]@0x%02x ", arg);
|
||||
if (pool_value) {
|
||||
fx_printf(
|
||||
"[reset][[[green]%s[reset]]",
|
||||
fx_value_get_cstr(pool_value));
|
||||
fx_value_get_cstr(pool_value, &s);
|
||||
fx_printf("[reset][[[green]%s[reset]]", s);
|
||||
} else {
|
||||
fx_printf("[red]<INVALID>[reset]");
|
||||
}
|
||||
@@ -220,9 +236,8 @@ void print_instruction(
|
||||
fx_printf("ldblock [cyan]@0x%02x ", arg);
|
||||
if (pool_value) {
|
||||
fx_printf("[reset][[[magenta]vvv[reset]]\n");
|
||||
print_scriptblock(
|
||||
fx_value_get_object(pool_value),
|
||||
depth + 1);
|
||||
fx_value_get_object(pool_value, &obj);
|
||||
print_scriptblock(obj, depth + 1);
|
||||
} else {
|
||||
fx_printf("[red]<INVALID>[reset]");
|
||||
}
|
||||
@@ -241,9 +256,8 @@ void print_instruction(
|
||||
}
|
||||
fx_printf("ldlocal [cyan]@0x%02x ", arg);
|
||||
if (pool_value) {
|
||||
fx_printf(
|
||||
"[reset][[[green]%s[reset]]",
|
||||
fx_value_get_cstr(pool_value));
|
||||
fx_value_get_cstr(pool_value, &s);
|
||||
fx_printf("[reset][[[green]%s[reset]]", s);
|
||||
} else {
|
||||
fx_printf("[red]<INVALID>");
|
||||
}
|
||||
@@ -259,7 +273,7 @@ void print_instruction(
|
||||
fx_printf("ldarg [cyan]@0x%02x", arg);
|
||||
break;
|
||||
case OPCODE_LDPROP:
|
||||
fx_printf("ldprop [cyan]@0x%02x", arg);
|
||||
fx_printf("ldprop");
|
||||
break;
|
||||
case OPCODE_LDELEM:
|
||||
fx_printf("ldelem [cyan]@0x%02x", arg);
|
||||
@@ -280,10 +294,8 @@ void print_instruction(
|
||||
}
|
||||
fx_printf("stlocal [cyan]@0x%02x ", arg);
|
||||
if (pool_value) {
|
||||
fx_printf("[%s]", fx_value_get_cstr(pool_value));
|
||||
fx_printf(
|
||||
"[reset][[[green]%s[reset]]",
|
||||
fx_value_get_cstr(pool_value));
|
||||
fx_value_get_cstr(pool_value, &s);
|
||||
fx_printf("[reset][[[green]%s[reset]]", s);
|
||||
} else {
|
||||
fx_printf("<INVALID>");
|
||||
}
|
||||
@@ -446,5 +458,7 @@ void print_instruction(
|
||||
|
||||
void print_value(fx_value *val)
|
||||
{
|
||||
fx_printf("[yellow]%d[reset]\n", val->v_int);
|
||||
fx_printf("[yellow]");
|
||||
fx_value_to_string(val, fx_stdout, NULL);
|
||||
fx_printf("[reset]\n");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user