mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Fixed codedump for human readable symbol format; ref #4684
This commit is contained in:
@@ -999,6 +999,7 @@ MRB_API mrb_value mrb_check_intern(mrb_state*,const char*,size_t);
|
||||
MRB_API mrb_value mrb_check_intern_str(mrb_state*,mrb_value);
|
||||
MRB_API const char *mrb_sym_name(mrb_state*,mrb_sym);
|
||||
MRB_API const char *mrb_sym_name_len(mrb_state*,mrb_sym,mrb_int*);
|
||||
MRB_API const char *mrb_sym_dump(mrb_state*,mrb_sym);
|
||||
MRB_API mrb_value mrb_sym_str(mrb_state*,mrb_sym);
|
||||
#define mrb_sym2name(mrb,sym) mrb_sym_name(mrb,sym)
|
||||
#define mrb_sym2name_len(mrb,sym,len) mrb_sym_name_len(mrb,sym,len)
|
||||
|
||||
+26
-26
@@ -16,7 +16,7 @@ print_r(mrb_state *mrb, mrb_irep *irep, size_t n)
|
||||
for (i=0; i+1<irep->nlocals; i++) {
|
||||
if (irep->lv[i].r == n) {
|
||||
mrb_sym sym = irep->lv[i].name;
|
||||
printf(" R%d:%s", (int)n, mrb_sym_name(mrb, sym));
|
||||
printf(" R%d:%s", (int)n, mrb_sym_dump(mrb, sym));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -82,7 +82,7 @@ codedump(mrb_state *mrb, mrb_irep *irep)
|
||||
|
||||
printf("local variable names:\n");
|
||||
for (i = 1; i < irep->nlocals; ++i) {
|
||||
char const *s = mrb_sym_name(mrb, irep->lv[i - 1].name);
|
||||
char const *s = mrb_sym_dump(mrb, irep->lv[i - 1].name);
|
||||
int n = irep->lv[i - 1].r ? irep->lv[i - 1].r : i;
|
||||
printf(" R%d:%s\n", n, s ? s : "");
|
||||
}
|
||||
@@ -147,7 +147,7 @@ codedump(mrb_state *mrb, mrb_irep *irep)
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_LOADSYM, BB):
|
||||
printf("OP_LOADSYM\tR%d\t:%s\t", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_LOADSYM\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_LOADNIL, B):
|
||||
@@ -167,43 +167,43 @@ codedump(mrb_state *mrb, mrb_irep *irep)
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_GETGV, BB):
|
||||
printf("OP_GETGV\tR%d\t:%s", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_GETGV\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_SETGV, BB):
|
||||
printf("OP_SETGV\t:%s\tR%d", mrb_sym_name(mrb, irep->syms[b]), a);
|
||||
printf("OP_SETGV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_GETSV, BB):
|
||||
printf("OP_GETSV\tR%d\t:%s", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_GETSV\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_SETSV, BB):
|
||||
printf("OP_SETSV\t:%s\tR%d", mrb_sym_name(mrb, irep->syms[b]), a);
|
||||
printf("OP_SETSV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_GETCONST, BB):
|
||||
printf("OP_GETCONST\tR%d\t:%s", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_GETCONST\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_SETCONST, BB):
|
||||
printf("OP_SETCONST\t:%s\tR%d", mrb_sym_name(mrb, irep->syms[b]), a);
|
||||
printf("OP_SETCONST\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_GETMCNST, BB):
|
||||
printf("OP_GETMCNST\tR%d\tR%d::%s", a, a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_GETMCNST\tR%d\tR%d::%s", a, a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_SETMCNST, BB):
|
||||
printf("OP_SETMCNST\tR%d::%s\tR%d", a+1, mrb_sym_name(mrb, irep->syms[b]), a);
|
||||
printf("OP_SETMCNST\tR%d::%s\tR%d", a+1, mrb_sym_dump(mrb, irep->syms[b]), a);
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_GETIV, BB):
|
||||
printf("OP_GETIV\tR%d\t%s", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_GETIV\tR%d\t%s", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_SETIV, BB):
|
||||
printf("OP_SETIV\t%s\tR%d", mrb_sym_name(mrb, irep->syms[b]), a);
|
||||
printf("OP_SETIV\t%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_GETUPVAR, BBB):
|
||||
@@ -215,11 +215,11 @@ codedump(mrb_state *mrb, mrb_irep *irep)
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_GETCV, BB):
|
||||
printf("OP_GETCV\tR%d\t%s", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_GETCV\tR%d\t%s", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_SETCV, BB):
|
||||
printf("OP_SETCV\t%s\tR%d", mrb_sym_name(mrb, irep->syms[b]), a);
|
||||
printf("OP_SETCV\t%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_JMP, S):
|
||||
@@ -238,16 +238,16 @@ codedump(mrb_state *mrb, mrb_irep *irep)
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_SENDV, BB):
|
||||
printf("OP_SENDV\tR%d\t:%s\n", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_SENDV\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
break;
|
||||
CASE(OP_SENDVB, BB):
|
||||
printf("OP_SENDVB\tR%d\t:%s\n", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_SENDVB\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
break;
|
||||
CASE(OP_SEND, BBB):
|
||||
printf("OP_SEND\tR%d\t:%s\t%d\n", a, mrb_sym_name(mrb, irep->syms[b]), c);
|
||||
printf("OP_SEND\tR%d\t:%s\t%d\n", a, mrb_sym_dump(mrb, irep->syms[b]), c);
|
||||
break;
|
||||
CASE(OP_SENDB, BBB):
|
||||
printf("OP_SENDB\tR%d\t:%s\t%d\n", a, mrb_sym_name(mrb, irep->syms[b]), c);
|
||||
printf("OP_SENDB\tR%d\t:%s\t%d\n", a, mrb_sym_dump(mrb, irep->syms[b]), c);
|
||||
break;
|
||||
CASE(OP_CALL, Z):
|
||||
printf("OP_CALL\n");
|
||||
@@ -275,14 +275,14 @@ codedump(mrb_state *mrb, mrb_irep *irep)
|
||||
MRB_ASPEC_BLOCK(a));
|
||||
break;
|
||||
CASE(OP_KEY_P, BB):
|
||||
printf("OP_KEY_P\tR%d\t:%s\t", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_KEY_P\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_KEYEND, Z):
|
||||
printf("OP_KEYEND\n");
|
||||
break;
|
||||
CASE(OP_KARG, BB):
|
||||
printf("OP_KARG\tR%d\t:%s\t", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_KARG\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_RETURN, B):
|
||||
@@ -322,13 +322,13 @@ codedump(mrb_state *mrb, mrb_irep *irep)
|
||||
printf("OP_RANGE_EXC\tR%d\n", a);
|
||||
break;
|
||||
CASE(OP_DEF, BB):
|
||||
printf("OP_DEF\tR%d\t:%s\n", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_DEF\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
break;
|
||||
CASE(OP_UNDEF, B):
|
||||
printf("OP_UNDEF\t:%s\n", mrb_sym_name(mrb, irep->syms[a]));
|
||||
printf("OP_UNDEF\t:%s\n", mrb_sym_dump(mrb, irep->syms[a]));
|
||||
break;
|
||||
CASE(OP_ALIAS, BB):
|
||||
printf("OP_ALIAS\t:%s\t%s\n", mrb_sym_name(mrb, irep->syms[a]), mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_ALIAS\t:%s\t%s\n", mrb_sym_dump(mrb, irep->syms[a]), mrb_sym_dump(mrb, irep->syms[b]));
|
||||
break;
|
||||
CASE(OP_ADD, B):
|
||||
printf("OP_ADD\tR%d\t\n", a);
|
||||
@@ -429,11 +429,11 @@ codedump(mrb_state *mrb, mrb_irep *irep)
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_CLASS, BB):
|
||||
printf("OP_CLASS\tR%d\t:%s", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_CLASS\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_MODULE, BB):
|
||||
printf("OP_MODULE\tR%d\t:%s", a, mrb_sym_name(mrb, irep->syms[b]));
|
||||
printf("OP_MODULE\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b]));
|
||||
print_lv_a(mrb, irep, a);
|
||||
break;
|
||||
CASE(OP_EXEC, BB):
|
||||
|
||||
+15
-3
@@ -524,14 +524,14 @@ mrb_sym_str(mrb_state *mrb, mrb_sym sym)
|
||||
return mrb_str_new_static(mrb, name, len);
|
||||
}
|
||||
|
||||
MRB_API const char*
|
||||
mrb_sym_name(mrb_state *mrb, mrb_sym sym)
|
||||
static const char*
|
||||
sym_name(mrb_state *mrb, mrb_sym sym, mrb_bool dump)
|
||||
{
|
||||
mrb_int len;
|
||||
const char *name = mrb_sym_name_len(mrb, sym, &len);
|
||||
|
||||
if (!name) return NULL;
|
||||
if (strlen(name) == (size_t)len) {
|
||||
if (strlen(name) == (size_t)len && (!dump || symname_p(name))) {
|
||||
return name;
|
||||
}
|
||||
else {
|
||||
@@ -542,6 +542,18 @@ mrb_sym_name(mrb_state *mrb, mrb_sym sym)
|
||||
}
|
||||
}
|
||||
|
||||
MRB_API const char*
|
||||
mrb_sym_name(mrb_state *mrb, mrb_sym sym)
|
||||
{
|
||||
return sym_name(mrb, sym, FALSE);
|
||||
}
|
||||
|
||||
MRB_API const char*
|
||||
mrb_sym_dump(mrb_state *mrb, mrb_sym sym)
|
||||
{
|
||||
return sym_name(mrb, sym, TRUE);
|
||||
}
|
||||
|
||||
#define lesser(a,b) (((a)>(b))?(b):(a))
|
||||
|
||||
static mrb_value
|
||||
|
||||
Reference in New Issue
Block a user