diff --git a/bshell/debug.c b/bshell/debug.c index 55984fb..ffca468 100644 --- a/bshell/debug.c +++ b/bshell/debug.c @@ -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][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][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][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]"); } @@ -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(""); } @@ -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"); }