summaryrefslogtreecommitdiffhomepage
path: root/src/codedump.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-07-30 22:07:31 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-07-30 22:58:01 +0900
commit8c9e7127845f84fcbb249c45936c97a89ca7a80a (patch)
tree3862b06b6b04c2b275307e73ca7172473786d035 /src/codedump.c
parent891839b976c75c77f238931123ac472e3284e95d (diff)
downloadmruby-8c9e7127845f84fcbb249c45936c97a89ca7a80a.tar.gz
mruby-8c9e7127845f84fcbb249c45936c97a89ca7a80a.zip
Keyword argument implemented.
Diffstat (limited to 'src/codedump.c')
-rw-r--r--src/codedump.c50
1 files changed, 34 insertions, 16 deletions
diff --git a/src/codedump.c b/src/codedump.c
index 22cbc59eb..dc0e0e548 100644
--- a/src/codedump.c
+++ b/src/codedump.c
@@ -78,6 +78,16 @@ codedump(mrb_state *mrb, mrb_irep *irep)
printf("irep %p nregs=%d nlocals=%d pools=%d syms=%d reps=%d\n", (void*)irep,
irep->nregs, irep->nlocals, (int)irep->plen, (int)irep->slen, (int)irep->rlen);
+ if (irep->lv) {
+ int i;
+
+ printf("local variable names:\n");
+ for (i = 1; i < irep->nlocals; ++i) {
+ char const *n = mrb_sym2name(mrb, irep->lv[i - 1].name);
+ printf(" R%d:%s\n", irep->lv[i - 1].r, n? n : "");
+ }
+ }
+
pc = irep->iseq;
pcend = pc + irep->ilen;
while (pc < pcend) {
@@ -246,10 +256,11 @@ codedump(mrb_state *mrb, mrb_irep *irep)
printf("OP_SUPER\tR%d\t%d\n", a, b);
break;
CASE(OP_ARGARY, BS):
- printf("OP_ARGARY\tR%d\t%d:%d:%d:%d", a,
- (b>>10)&0x3f,
- (b>>9)&0x1,
- (b>>4)&0x1f,
+ printf("OP_ARGARY\tR%d\t%d:%d:%d:%d (%d)", a,
+ (b>>11)&0x3f,
+ (b>>10)&0x1,
+ (b>>5)&0x1f,
+ (b>>4)&0x1,
(b>>0)&0xf);
print_lv_a(mrb, irep, a);
break;
@@ -263,32 +274,39 @@ codedump(mrb_state *mrb, mrb_irep *irep)
(a>>1)&0x1,
a & 0x1);
break;
- CASE(OP_KARG, BB):
- printf("OP_KARG\tR(%d)\tK(%d)\n", a, b);
+ CASE(OP_KEY_P, BB):
+ printf("OP_KEY_P\tR%d\t:%s\t", a, mrb_sym2name(mrb, irep->syms[b]));
+ print_lv_a(mrb, irep, a);
break;
- CASE(OP_KARG2, BB):
- printf("OP_KARG2\tR(%d)\tK(%d)\n", a, b);
+ CASE(OP_KEYEND, Z):
+ printf("OP_KEYEND\n");
+ break;
+ CASE(OP_KARG, BB):
+ printf("OP_KARG\tR%d\t:%s\t", a, mrb_sym2name(mrb, irep->syms[b]));
+ print_lv_a(mrb, irep, a);
break;
CASE(OP_KDICT, B):
- printf("OP_KDICt\tR(%d)\n", a);
+ printf("OP_KDICT\tR%d\t\t", a);
+ print_lv_a(mrb, irep, a);
break;
CASE(OP_RETURN, B):
- printf("OP_RETURN\tR%d", a);
+ printf("OP_RETURN\tR%d\t\t", a);
print_lv_a(mrb, irep, a);
break;
CASE(OP_RETURN_BLK, B):
- printf("OP_RETURN_BLK\tR%d", a);
+ printf("OP_RETURN_BLK\tR%d\t\t", a);
print_lv_a(mrb, irep, a);
break;
CASE(OP_BREAK, B):
- printf("OP_BREAK\tR%d", a);
+ printf("OP_BREAK\tR%d\t\t", a);
print_lv_a(mrb, irep, a);
break;
CASE(OP_BLKPUSH, BS):
- printf("OP_BLKPUSH\tR%d\t%d:%d:%d:%d", a,
- (b>>10)&0x3f,
- (b>>9)&0x1,
- (b>>4)&0x1f,
+ printf("OP_BLKPUSH\tR%d\t%d:%d:%d:%d (%d)", a,
+ (b>>11)&0x3f,
+ (b>>10)&0x1,
+ (b>>5)&0x1f,
+ (b>>4)&0x1,
(b>>0)&0xf);
print_lv_a(mrb, irep, a);
break;