Changeset 439 for EcnlProtoTool/trunk/mruby-2.1.1/src/codedump.c
- Timestamp:
- Jul 9, 2020, 8:51:43 AM (4 years ago)
- Location:
- EcnlProtoTool/trunk/mruby-2.1.1
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mruby-2.1.1/src/codedump.c
r331 r439 7 7 8 8 #ifndef MRB_DISABLE_STDIO 9 static int10 print_r(mrb_state *mrb, mrb_irep *irep, size_t n , int pre)9 static void 10 print_r(mrb_state *mrb, mrb_irep *irep, size_t n) 11 11 { 12 12 size_t i; 13 13 14 if (n == 0) return 0;14 if (n == 0) return; 15 15 16 16 for (i=0; i+1<irep->nlocals; i++) { 17 17 if (irep->lv[i].r == n) { 18 18 mrb_sym sym = irep->lv[i].name; 19 if (pre) printf(" "); 20 printf("R%d:%s", (int)n, mrb_sym2name(mrb, sym)); 21 return 1; 19 printf(" R%d:%s", (int)n, mrb_sym_dump(mrb, sym)); 20 break; 22 21 } 23 22 } 24 return 0; 25 } 26 27 #define RA 1 28 #define RB 2 29 #define RAB 3 23 } 30 24 31 25 static void 32 print_lv(mrb_state *mrb, mrb_irep *irep, mrb_code c, int r) 33 { 34 int pre = 0; 35 36 if (!irep->lv 37 || ((!(r & RA) || GETARG_A(c) >= irep->nlocals) 38 && (!(r & RB) || GETARG_B(c) >= irep->nlocals))) { 26 print_lv_a(mrb_state *mrb, mrb_irep *irep, uint16_t a) 27 { 28 if (!irep->lv || a >= irep->nlocals || a == 0) { 39 29 printf("\n"); 40 30 return; 41 31 } 42 printf("\t; "); 43 if (r & RA) { 44 pre = print_r(mrb, irep, GETARG_A(c), 0); 45 } 46 if (r & RB) { 47 print_r(mrb, irep, GETARG_B(c), pre); 48 } 32 printf("\t;"); 33 print_r(mrb, irep, a); 49 34 printf("\n"); 50 35 } 51 #endif 36 37 static void 38 print_lv_ab(mrb_state *mrb, mrb_irep *irep, uint16_t a, uint16_t b) 39 { 40 if (!irep->lv || (a >= irep->nlocals && b >= irep->nlocals) || a+b == 0) { 41 printf("\n"); 42 return; 43 } 44 printf("\t;"); 45 if (a > 0) print_r(mrb, irep, a); 46 if (b > 0) print_r(mrb, irep, b); 47 printf("\n"); 48 } 49 50 static void 51 print_header(mrb_state *mrb, mrb_irep *irep, ptrdiff_t i) 52 { 53 int32_t line; 54 55 line = mrb_debug_get_line(mrb, irep, i); 56 if (line < 0) { 57 printf(" "); 58 } 59 else { 60 printf("%5d ", line); 61 } 62 63 printf("%03d ", (int)i); 64 } 65 66 #define CASE(insn,ops) case insn: FETCH_ ## ops (); L_ ## insn 52 67 53 68 static void 54 69 codedump(mrb_state *mrb, mrb_irep *irep) 55 70 { 56 #ifndef MRB_DISABLE_STDIO57 int i;58 71 int ai; 59 mrb_code c; 72 const mrb_code *pc, *pcend; 73 mrb_code ins; 60 74 const char *file = NULL, *next_file; 61 int32_t line;62 75 63 76 if (!irep) return; 64 printf("irep %p nregs=%d nlocals=%d pools=%d syms=%d reps=%d\n", (void*)irep, 65 irep->nregs, irep->nlocals, (int)irep->plen, (int)irep->slen, (int)irep->rlen); 66 67 for (i = 0; i < (int)irep->ilen; i++) { 77 printf("irep %p nregs=%d nlocals=%d pools=%d syms=%d reps=%d iseq=%d\n", (void*)irep, 78 irep->nregs, irep->nlocals, (int)irep->plen, (int)irep->slen, (int)irep->rlen, (int)irep->ilen); 79 80 if (irep->lv) { 81 int i; 82 83 printf("local variable names:\n"); 84 for (i = 1; i < irep->nlocals; ++i) { 85 char const *s = mrb_sym_dump(mrb, irep->lv[i - 1].name); 86 int n = irep->lv[i - 1].r ? irep->lv[i - 1].r : i; 87 printf(" R%d:%s\n", n, s ? s : ""); 88 } 89 } 90 91 pc = irep->iseq; 92 pcend = pc + irep->ilen; 93 while (pc < pcend) { 94 ptrdiff_t i; 95 uint32_t a; 96 uint16_t b; 97 uint8_t c; 98 68 99 ai = mrb_gc_arena_save(mrb); 69 100 70 next_file = mrb_debug_get_filename(irep, i); 101 i = pc - irep->iseq; 102 next_file = mrb_debug_get_filename(mrb, irep, i); 71 103 if (next_file && file != next_file) { 72 104 printf("file: %s\n", next_file); 73 105 file = next_file; 74 106 } 75 line = mrb_debug_get_line(irep, i); 76 if (line < 0) { 77 printf(" "); 78 } 79 else { 80 printf("%5d ", line); 81 } 82 83 printf("%03d ", i); 84 c = irep->iseq[i]; 85 switch (GET_OPCODE(c)) { 86 case OP_NOP: 107 print_header(mrb, irep, i); 108 ins = READ_B(); 109 switch (ins) { 110 CASE(OP_NOP, Z): 87 111 printf("OP_NOP\n"); 88 112 break; 89 case OP_MOVE:90 printf("OP_MOVE\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c));91 print_lv (mrb, irep, c, RAB);92 break; 93 case OP_LOADL:113 CASE(OP_MOVE, BB): 114 printf("OP_MOVE\tR%d\tR%d\t", a, b); 115 print_lv_ab(mrb, irep, a, b); 116 break; 117 CASE(OP_LOADL, BB): 94 118 { 95 mrb_value v = irep->pool[ GETARG_Bx(c)];119 mrb_value v = irep->pool[b]; 96 120 mrb_value s = mrb_inspect(mrb, v); 97 printf("OP_LOADL\tR%d\tL(%d)\t; %s", GETARG_A(c), GETARG_Bx(c), RSTRING_PTR(s));121 printf("OP_LOADL\tR%d\tL(%d)\t; %s", a, b, RSTRING_PTR(s)); 98 122 } 99 print_lv(mrb, irep, c, RA); 100 break; 101 case OP_LOADI: 102 printf("OP_LOADI\tR%d\t%d\t", GETARG_A(c), GETARG_sBx(c)); 103 print_lv(mrb, irep, c, RA); 104 break; 105 case OP_LOADSYM: 106 printf("OP_LOADSYM\tR%d\t:%s", GETARG_A(c), 107 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)])); 108 print_lv(mrb, irep, c, RA); 109 break; 110 case OP_LOADNIL: 111 printf("OP_LOADNIL\tR%d\t\t", GETARG_A(c)); 112 print_lv(mrb, irep, c, RA); 113 break; 114 case OP_LOADSELF: 115 printf("OP_LOADSELF\tR%d\t\t", GETARG_A(c)); 116 print_lv(mrb, irep, c, RA); 117 break; 118 case OP_LOADT: 119 printf("OP_LOADT\tR%d\t\t", GETARG_A(c)); 120 print_lv(mrb, irep, c, RA); 121 break; 122 case OP_LOADF: 123 printf("OP_LOADF\tR%d\t\t", GETARG_A(c)); 124 print_lv(mrb, irep, c, RA); 125 break; 126 case OP_GETGLOBAL: 127 printf("OP_GETGLOBAL\tR%d\t:%s", GETARG_A(c), 128 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)])); 129 print_lv(mrb, irep, c, RA); 130 break; 131 case OP_SETGLOBAL: 132 printf("OP_SETGLOBAL\t:%s\tR%d\t", 133 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)]), 134 GETARG_A(c)); 135 print_lv(mrb, irep, c, RA); 136 break; 137 case OP_GETCONST: 138 printf("OP_GETCONST\tR%d\t:%s", GETARG_A(c), 139 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)])); 140 print_lv(mrb, irep, c, RA); 141 break; 142 case OP_SETCONST: 143 printf("OP_SETCONST\t:%s\tR%d\t", 144 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)]), 145 GETARG_A(c)); 146 print_lv(mrb, irep, c, RA); 147 break; 148 case OP_GETMCNST: 149 printf("OP_GETMCNST\tR%d\tR%d::%s", GETARG_A(c), GETARG_A(c), 150 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)])); 151 print_lv(mrb, irep, c, RAB); 152 break; 153 case OP_SETMCNST: 154 printf("OP_SETMCNST\tR%d::%s\tR%d", GETARG_A(c)+1, 155 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)]), 156 GETARG_A(c)); 157 print_lv(mrb, irep, c, RA); 158 break; 159 case OP_GETIV: 160 printf("OP_GETIV\tR%d\t%s", GETARG_A(c), 161 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)])); 162 print_lv(mrb, irep, c, RA); 163 break; 164 case OP_SETIV: 165 printf("OP_SETIV\t%s\tR%d", 166 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)]), 167 GETARG_A(c)); 168 print_lv(mrb, irep, c, RA); 169 break; 170 case OP_GETUPVAR: 171 printf("OP_GETUPVAR\tR%d\t%d\t%d", 172 GETARG_A(c), GETARG_B(c), GETARG_C(c)); 173 print_lv(mrb, irep, c, RA); 174 break; 175 case OP_SETUPVAR: 176 printf("OP_SETUPVAR\tR%d\t%d\t%d", 177 GETARG_A(c), GETARG_B(c), GETARG_C(c)); 178 print_lv(mrb, irep, c, RA); 179 break; 180 case OP_GETCV: 181 printf("OP_GETCV\tR%d\t%s", GETARG_A(c), 182 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)])); 183 print_lv(mrb, irep, c, RA); 184 break; 185 case OP_SETCV: 186 printf("OP_SETCV\t%s\tR%d", 187 mrb_sym2name(mrb, irep->syms[GETARG_Bx(c)]), 188 GETARG_A(c)); 189 print_lv(mrb, irep, c, RA); 190 break; 191 case OP_JMP: 192 printf("OP_JMP\t%03d\n", i+GETARG_sBx(c)); 193 break; 194 case OP_JMPIF: 195 printf("OP_JMPIF\tR%d\t%03d\n", GETARG_A(c), i+GETARG_sBx(c)); 196 break; 197 case OP_JMPNOT: 198 printf("OP_JMPNOT\tR%d\t%03d\n", GETARG_A(c), i+GETARG_sBx(c)); 199 break; 200 case OP_SEND: 201 printf("OP_SEND\tR%d\t:%s\t%d\n", GETARG_A(c), 202 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 203 GETARG_C(c)); 204 break; 205 case OP_SENDB: 206 printf("OP_SENDB\tR%d\t:%s\t%d\n", GETARG_A(c), 207 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 208 GETARG_C(c)); 209 break; 210 case OP_TAILCALL: 211 printf("OP_TAILCALL\tR%d\t:%s\t%d\n", GETARG_A(c), 212 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 213 GETARG_C(c)); 214 break; 215 case OP_SUPER: 216 printf("OP_SUPER\tR%d\t%d\n", GETARG_A(c), 217 GETARG_C(c)); 218 break; 219 case OP_ARGARY: 220 printf("OP_ARGARY\tR%d\t%d:%d:%d:%d", GETARG_A(c), 221 (GETARG_Bx(c)>>10)&0x3f, 222 (GETARG_Bx(c)>>9)&0x1, 223 (GETARG_Bx(c)>>4)&0x1f, 224 (GETARG_Bx(c)>>0)&0xf); 225 print_lv(mrb, irep, c, RA); 226 break; 227 228 case OP_ENTER: 123 print_lv_a(mrb, irep, a); 124 break; 125 CASE(OP_LOADI, BB): 126 printf("OP_LOADI\tR%d\t%d\t", a, b); 127 print_lv_a(mrb, irep, a); 128 break; 129 CASE(OP_LOADINEG, BB): 130 printf("OP_LOADI\tR%d\t-%d\t", a, b); 131 print_lv_a(mrb, irep, a); 132 break; 133 CASE(OP_LOADI__1, B): 134 printf("OP_LOADI__1\tR%d\t\t", a); 135 print_lv_a(mrb, irep, a); 136 break; 137 CASE(OP_LOADI_0, B): goto L_LOADI; 138 CASE(OP_LOADI_1, B): goto L_LOADI; 139 CASE(OP_LOADI_2, B): goto L_LOADI; 140 CASE(OP_LOADI_3, B): goto L_LOADI; 141 CASE(OP_LOADI_4, B): goto L_LOADI; 142 CASE(OP_LOADI_5, B): goto L_LOADI; 143 CASE(OP_LOADI_6, B): goto L_LOADI; 144 CASE(OP_LOADI_7, B): 145 L_LOADI: 146 printf("OP_LOADI_%d\tR%d\t\t", ins-(int)OP_LOADI_0, a); 147 print_lv_a(mrb, irep, a); 148 break; 149 CASE(OP_LOADSYM, BB): 150 printf("OP_LOADSYM\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b])); 151 print_lv_a(mrb, irep, a); 152 break; 153 CASE(OP_LOADNIL, B): 154 printf("OP_LOADNIL\tR%d\t\t", a); 155 print_lv_a(mrb, irep, a); 156 break; 157 CASE(OP_LOADSELF, B): 158 printf("OP_LOADSELF\tR%d\t\t", a); 159 print_lv_a(mrb, irep, a); 160 break; 161 CASE(OP_LOADT, B): 162 printf("OP_LOADT\tR%d\t\t", a); 163 print_lv_a(mrb, irep, a); 164 break; 165 CASE(OP_LOADF, B): 166 printf("OP_LOADF\tR%d\t\t", a); 167 print_lv_a(mrb, irep, a); 168 break; 169 CASE(OP_GETGV, BB): 170 printf("OP_GETGV\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); 171 print_lv_a(mrb, irep, a); 172 break; 173 CASE(OP_SETGV, BB): 174 printf("OP_SETGV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); 175 print_lv_a(mrb, irep, a); 176 break; 177 CASE(OP_GETSV, BB): 178 printf("OP_GETSV\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); 179 print_lv_a(mrb, irep, a); 180 break; 181 CASE(OP_SETSV, BB): 182 printf("OP_SETSV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); 183 print_lv_a(mrb, irep, a); 184 break; 185 CASE(OP_GETCONST, BB): 186 printf("OP_GETCONST\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); 187 print_lv_a(mrb, irep, a); 188 break; 189 CASE(OP_SETCONST, BB): 190 printf("OP_SETCONST\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); 191 print_lv_a(mrb, irep, a); 192 break; 193 CASE(OP_GETMCNST, BB): 194 printf("OP_GETMCNST\tR%d\tR%d::%s", a, a, mrb_sym_dump(mrb, irep->syms[b])); 195 print_lv_a(mrb, irep, a); 196 break; 197 CASE(OP_SETMCNST, BB): 198 printf("OP_SETMCNST\tR%d::%s\tR%d", a+1, mrb_sym_dump(mrb, irep->syms[b]), a); 199 print_lv_a(mrb, irep, a); 200 break; 201 CASE(OP_GETIV, BB): 202 printf("OP_GETIV\tR%d\t%s", a, mrb_sym_dump(mrb, irep->syms[b])); 203 print_lv_a(mrb, irep, a); 204 break; 205 CASE(OP_SETIV, BB): 206 printf("OP_SETIV\t%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); 207 print_lv_a(mrb, irep, a); 208 break; 209 CASE(OP_GETUPVAR, BBB): 210 printf("OP_GETUPVAR\tR%d\t%d\t%d", a, b, c); 211 print_lv_a(mrb, irep, a); 212 break; 213 CASE(OP_SETUPVAR, BBB): 214 printf("OP_SETUPVAR\tR%d\t%d\t%d", a, b, c); 215 print_lv_a(mrb, irep, a); 216 break; 217 CASE(OP_GETCV, BB): 218 printf("OP_GETCV\tR%d\t%s", a, mrb_sym_dump(mrb, irep->syms[b])); 219 print_lv_a(mrb, irep, a); 220 break; 221 CASE(OP_SETCV, BB): 222 printf("OP_SETCV\t%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a); 223 print_lv_a(mrb, irep, a); 224 break; 225 CASE(OP_JMP, S): 226 printf("OP_JMP\t\t%03d\n", a); 227 break; 228 CASE(OP_JMPIF, BS): 229 printf("OP_JMPIF\tR%d\t%03d\t", a, b); 230 print_lv_a(mrb, irep, a); 231 break; 232 CASE(OP_JMPNOT, BS): 233 printf("OP_JMPNOT\tR%d\t%03d\t", a, b); 234 print_lv_a(mrb, irep, a); 235 break; 236 CASE(OP_JMPNIL, BS): 237 printf("OP_JMPNIL\tR%d\t%03d\t", a, b); 238 print_lv_a(mrb, irep, a); 239 break; 240 CASE(OP_SENDV, BB): 241 printf("OP_SENDV\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b])); 242 break; 243 CASE(OP_SENDVB, BB): 244 printf("OP_SENDVB\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b])); 245 break; 246 CASE(OP_SEND, BBB): 247 printf("OP_SEND\tR%d\t:%s\t%d\n", a, mrb_sym_dump(mrb, irep->syms[b]), c); 248 break; 249 CASE(OP_SENDB, BBB): 250 printf("OP_SENDB\tR%d\t:%s\t%d\n", a, mrb_sym_dump(mrb, irep->syms[b]), c); 251 break; 252 CASE(OP_CALL, Z): 253 printf("OP_CALL\n"); 254 break; 255 CASE(OP_SUPER, BB): 256 printf("OP_SUPER\tR%d\t%d\n", a, b); 257 break; 258 CASE(OP_ARGARY, BS): 259 printf("OP_ARGARY\tR%d\t%d:%d:%d:%d (%d)", a, 260 (b>>11)&0x3f, 261 (b>>10)&0x1, 262 (b>>5)&0x1f, 263 (b>>4)&0x1, 264 (b>>0)&0xf); 265 print_lv_a(mrb, irep, a); 266 break; 267 CASE(OP_ENTER, W): 229 268 printf("OP_ENTER\t%d:%d:%d:%d:%d:%d:%d\n", 230 (GETARG_Ax(c)>>18)&0x1f, 231 (GETARG_Ax(c)>>13)&0x1f, 232 (GETARG_Ax(c)>>12)&0x1, 233 (GETARG_Ax(c)>>7)&0x1f, 234 (GETARG_Ax(c)>>2)&0x1f, 235 (GETARG_Ax(c)>>1)&0x1, 236 GETARG_Ax(c) & 0x1); 237 break; 238 case OP_RETURN: 239 printf("OP_RETURN\tR%d", GETARG_A(c)); 240 switch (GETARG_B(c)) { 241 case OP_R_NORMAL: 242 printf("\tnormal\t"); break; 243 case OP_R_RETURN: 244 printf("\treturn\t"); break; 245 case OP_R_BREAK: 246 printf("\tbreak\t"); break; 247 default: 248 printf("\tbroken\t"); break; 269 MRB_ASPEC_REQ(a), 270 MRB_ASPEC_OPT(a), 271 MRB_ASPEC_REST(a), 272 MRB_ASPEC_POST(a), 273 MRB_ASPEC_KEY(a), 274 MRB_ASPEC_KDICT(a), 275 MRB_ASPEC_BLOCK(a)); 276 break; 277 CASE(OP_KEY_P, BB): 278 printf("OP_KEY_P\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b])); 279 print_lv_a(mrb, irep, a); 280 break; 281 CASE(OP_KEYEND, Z): 282 printf("OP_KEYEND\n"); 283 break; 284 CASE(OP_KARG, BB): 285 printf("OP_KARG\tR%d\t:%s\t", a, mrb_sym_dump(mrb, irep->syms[b])); 286 print_lv_a(mrb, irep, a); 287 break; 288 CASE(OP_RETURN, B): 289 printf("OP_RETURN\tR%d\t\t", a); 290 print_lv_a(mrb, irep, a); 291 break; 292 CASE(OP_RETURN_BLK, B): 293 printf("OP_RETURN_BLK\tR%d\t\t", a); 294 print_lv_a(mrb, irep, a); 295 break; 296 CASE(OP_BREAK, B): 297 printf("OP_BREAK\tR%d\t\t", a); 298 print_lv_a(mrb, irep, a); 299 break; 300 CASE(OP_BLKPUSH, BS): 301 printf("OP_BLKPUSH\tR%d\t%d:%d:%d:%d (%d)", a, 302 (b>>11)&0x3f, 303 (b>>10)&0x1, 304 (b>>5)&0x1f, 305 (b>>4)&0x1, 306 (b>>0)&0xf); 307 print_lv_a(mrb, irep, a); 308 break; 309 CASE(OP_LAMBDA, BB): 310 printf("OP_LAMBDA\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]); 311 break; 312 CASE(OP_BLOCK, BB): 313 printf("OP_BLOCK\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]); 314 break; 315 CASE(OP_METHOD, BB): 316 printf("OP_METHOD\tR%d\tI(%d:%p)\n", a, b, irep->reps[b]); 317 break; 318 CASE(OP_RANGE_INC, B): 319 printf("OP_RANGE_INC\tR%d\n", a); 320 break; 321 CASE(OP_RANGE_EXC, B): 322 printf("OP_RANGE_EXC\tR%d\n", a); 323 break; 324 CASE(OP_DEF, BB): 325 printf("OP_DEF\tR%d\t:%s\n", a, mrb_sym_dump(mrb, irep->syms[b])); 326 break; 327 CASE(OP_UNDEF, B): 328 printf("OP_UNDEF\t:%s\n", mrb_sym_dump(mrb, irep->syms[a])); 329 break; 330 CASE(OP_ALIAS, BB): 331 printf("OP_ALIAS\t:%s\t%s\n", mrb_sym_dump(mrb, irep->syms[a]), mrb_sym_dump(mrb, irep->syms[b])); 332 break; 333 CASE(OP_ADD, B): 334 printf("OP_ADD\tR%d\t\n", a); 335 break; 336 CASE(OP_ADDI, BB): 337 printf("OP_ADDI\tR%d\t%d\n", a, b); 338 break; 339 CASE(OP_SUB, B): 340 printf("OP_SUB\tR%d\t\n", a); 341 break; 342 CASE(OP_SUBI, BB): 343 printf("OP_SUBI\tR%d\t%d\n", a, b); 344 break; 345 CASE(OP_MUL, B): 346 printf("OP_MUL\tR%d\t\n", a); 347 break; 348 CASE(OP_DIV, B): 349 printf("OP_DIV\tR%d\t\n", a); 350 break; 351 CASE(OP_LT, B): 352 printf("OP_LT\t\tR%d\t\n", a); 353 break; 354 CASE(OP_LE, B): 355 printf("OP_LE\t\tR%d\t\n", a); 356 break; 357 CASE(OP_GT, B): 358 printf("OP_GT\t\tR%d\t\n", a); 359 break; 360 CASE(OP_GE, B): 361 printf("OP_GE\t\tR%d\t\n", a); 362 break; 363 CASE(OP_EQ, B): 364 printf("OP_EQ\t\tR%d\t\n", a); 365 break; 366 CASE(OP_ARRAY, BB): 367 printf("OP_ARRAY\tR%d\t%d\t", a, b); 368 print_lv_a(mrb, irep, a); 369 break; 370 CASE(OP_ARRAY2, BBB): 371 printf("OP_ARRAY\tR%d\tR%d\t%d\t", a, b, c); 372 print_lv_ab(mrb, irep, a, b); 373 break; 374 CASE(OP_ARYCAT, B): 375 printf("OP_ARYCAT\tR%d\t", a); 376 print_lv_a(mrb, irep, a); 377 break; 378 CASE(OP_ARYPUSH, B): 379 printf("OP_ARYPUSH\tR%d\t", a); 380 print_lv_a(mrb, irep, a); 381 break; 382 CASE(OP_ARYDUP, B): 383 printf("OP_ARYDUP\tR%d\t", a); 384 print_lv_a(mrb, irep, a); 385 break; 386 CASE(OP_AREF, BBB): 387 printf("OP_AREF\tR%d\tR%d\t%d", a, b, c); 388 print_lv_ab(mrb, irep, a, b); 389 break; 390 CASE(OP_ASET, BBB): 391 printf("OP_ASET\tR%d\tR%d\t%d", a, b, c); 392 print_lv_ab(mrb, irep, a, b); 393 break; 394 CASE(OP_APOST, BBB): 395 printf("OP_APOST\tR%d\t%d\t%d", a, b, c); 396 print_lv_a(mrb, irep, a); 397 break; 398 CASE(OP_INTERN, B): 399 printf("OP_INTERN\tR%d", a); 400 print_lv_a(mrb, irep, a); 401 break; 402 CASE(OP_STRING, BB): 403 { 404 mrb_value v = irep->pool[b]; 405 mrb_value s = mrb_str_dump(mrb, mrb_str_new(mrb, RSTRING_PTR(v), RSTRING_LEN(v))); 406 printf("OP_STRING\tR%d\tL(%d)\t; %s", a, b, RSTRING_PTR(s)); 249 407 } 250 print_lv(mrb, irep, c, RA); 251 break; 252 case OP_BLKPUSH: 253 printf("OP_BLKPUSH\tR%d\t%d:%d:%d:%d", GETARG_A(c), 254 (GETARG_Bx(c)>>10)&0x3f, 255 (GETARG_Bx(c)>>9)&0x1, 256 (GETARG_Bx(c)>>4)&0x1f, 257 (GETARG_Bx(c)>>0)&0xf); 258 print_lv(mrb, irep, c, RA); 259 break; 260 261 case OP_LAMBDA: 262 printf("OP_LAMBDA\tR%d\tI(%+d)\t", GETARG_A(c), GETARG_b(c)+1); 263 switch (GETARG_c(c)) { 264 case OP_L_METHOD: 265 printf("method"); break; 266 case OP_L_BLOCK: 267 printf("block"); break; 268 case OP_L_LAMBDA: 269 printf("lambda"); break; 270 } 271 print_lv(mrb, irep, c, RA); 272 break; 273 case OP_RANGE: 274 printf("OP_RANGE\tR%d\tR%d\t%d", GETARG_A(c), GETARG_B(c), GETARG_C(c)); 275 print_lv(mrb, irep, c, RAB); 276 break; 277 case OP_METHOD: 278 printf("OP_METHOD\tR%d\t:%s", GETARG_A(c), 279 mrb_sym2name(mrb, irep->syms[GETARG_B(c)])); 280 print_lv(mrb, irep, c, RA); 281 break; 282 283 case OP_ADD: 284 printf("OP_ADD\tR%d\t:%s\t%d\n", GETARG_A(c), 285 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 286 GETARG_C(c)); 287 break; 288 case OP_ADDI: 289 printf("OP_ADDI\tR%d\t:%s\t%d\n", GETARG_A(c), 290 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 291 GETARG_C(c)); 292 break; 293 case OP_SUB: 294 printf("OP_SUB\tR%d\t:%s\t%d\n", GETARG_A(c), 295 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 296 GETARG_C(c)); 297 break; 298 case OP_SUBI: 299 printf("OP_SUBI\tR%d\t:%s\t%d\n", GETARG_A(c), 300 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 301 GETARG_C(c)); 302 break; 303 case OP_MUL: 304 printf("OP_MUL\tR%d\t:%s\t%d\n", GETARG_A(c), 305 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 306 GETARG_C(c)); 307 break; 308 case OP_DIV: 309 printf("OP_DIV\tR%d\t:%s\t%d\n", GETARG_A(c), 310 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 311 GETARG_C(c)); 312 break; 313 case OP_LT: 314 printf("OP_LT\tR%d\t:%s\t%d\n", GETARG_A(c), 315 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 316 GETARG_C(c)); 317 break; 318 case OP_LE: 319 printf("OP_LE\tR%d\t:%s\t%d\n", GETARG_A(c), 320 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 321 GETARG_C(c)); 322 break; 323 case OP_GT: 324 printf("OP_GT\tR%d\t:%s\t%d\n", GETARG_A(c), 325 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 326 GETARG_C(c)); 327 break; 328 case OP_GE: 329 printf("OP_GE\tR%d\t:%s\t%d\n", GETARG_A(c), 330 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 331 GETARG_C(c)); 332 break; 333 case OP_EQ: 334 printf("OP_EQ\t\tR%d\t:%s\t%d\n", GETARG_A(c), 335 mrb_sym2name(mrb, irep->syms[GETARG_B(c)]), 336 GETARG_C(c)); 337 break; 338 339 case OP_STOP: 340 printf("OP_STOP\n"); 341 break; 342 343 case OP_ARRAY: 344 printf("OP_ARRAY\tR%d\tR%d\t%d", GETARG_A(c), GETARG_B(c), GETARG_C(c)); 345 print_lv(mrb, irep, c, RAB); 346 break; 347 case OP_ARYCAT: 348 printf("OP_ARYCAT\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); 349 print_lv(mrb, irep, c, RAB); 350 break; 351 case OP_ARYPUSH: 352 printf("OP_ARYPUSH\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); 353 print_lv(mrb, irep, c, RAB); 354 break; 355 case OP_AREF: 356 printf("OP_AREF\tR%d\tR%d\t%d", GETARG_A(c), GETARG_B(c), GETARG_C(c)); 357 print_lv(mrb, irep, c, RAB); 358 break; 359 case OP_APOST: 360 printf("OP_APOST\tR%d\t%d\t%d", GETARG_A(c), GETARG_B(c), GETARG_C(c)); 361 print_lv(mrb, irep, c, RA); 362 break; 363 case OP_STRING: 408 print_lv_a(mrb, irep, a); 409 break; 410 CASE(OP_STRCAT, B): 411 printf("OP_STRCAT\tR%d\t", a); 412 print_lv_a(mrb, irep, a); 413 break; 414 CASE(OP_HASH, BB): 415 printf("OP_HASH\tR%d\t%d\t", a, b); 416 print_lv_a(mrb, irep, a); 417 break; 418 CASE(OP_HASHADD, BB): 419 printf("OP_HASHADD\tR%d\t%d\t", a, b); 420 print_lv_a(mrb, irep, a); 421 break; 422 CASE(OP_HASHCAT, B): 423 printf("OP_HASHCAT\tR%d\t", a); 424 print_lv_a(mrb, irep, a); 425 break; 426 427 CASE(OP_OCLASS, B): 428 printf("OP_OCLASS\tR%d\t\t", a); 429 print_lv_a(mrb, irep, a); 430 break; 431 CASE(OP_CLASS, BB): 432 printf("OP_CLASS\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); 433 print_lv_a(mrb, irep, a); 434 break; 435 CASE(OP_MODULE, BB): 436 printf("OP_MODULE\tR%d\t:%s", a, mrb_sym_dump(mrb, irep->syms[b])); 437 print_lv_a(mrb, irep, a); 438 break; 439 CASE(OP_EXEC, BB): 440 printf("OP_EXEC\tR%d\tI(%d:%p)", a, b, irep->reps[b]); 441 print_lv_a(mrb, irep, a); 442 break; 443 CASE(OP_SCLASS, B): 444 printf("OP_SCLASS\tR%d\t", a); 445 print_lv_a(mrb, irep, a); 446 break; 447 CASE(OP_TCLASS, B): 448 printf("OP_TCLASS\tR%d\t\t", a); 449 print_lv_a(mrb, irep, a); 450 break; 451 CASE(OP_ERR, B): 364 452 { 365 mrb_value v = irep->pool[GETARG_Bx(c)]; 366 mrb_value s = mrb_str_dump(mrb, mrb_str_new(mrb, RSTRING_PTR(v), RSTRING_LEN(v))); 367 printf("OP_STRING\tR%d\tL(%d)\t; %s", GETARG_A(c), GETARG_Bx(c), RSTRING_PTR(s)); 368 } 369 print_lv(mrb, irep, c, RA); 370 break; 371 case OP_STRCAT: 372 printf("OP_STRCAT\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); 373 print_lv(mrb, irep, c, RAB); 374 break; 375 case OP_HASH: 376 printf("OP_HASH\tR%d\tR%d\t%d", GETARG_A(c), GETARG_B(c), GETARG_C(c)); 377 print_lv(mrb, irep, c, RAB); 378 break; 379 380 case OP_OCLASS: 381 printf("OP_OCLASS\tR%d\t\t", GETARG_A(c)); 382 print_lv(mrb, irep, c, RA); 383 break; 384 case OP_CLASS: 385 printf("OP_CLASS\tR%d\t:%s", GETARG_A(c), 386 mrb_sym2name(mrb, irep->syms[GETARG_B(c)])); 387 print_lv(mrb, irep, c, RA); 388 break; 389 case OP_MODULE: 390 printf("OP_MODULE\tR%d\t:%s", GETARG_A(c), 391 mrb_sym2name(mrb, irep->syms[GETARG_B(c)])); 392 print_lv(mrb, irep, c, RA); 393 break; 394 case OP_EXEC: 395 printf("OP_EXEC\tR%d\tI(%+d)", GETARG_A(c), GETARG_Bx(c)+1); 396 print_lv(mrb, irep, c, RA); 397 break; 398 case OP_SCLASS: 399 printf("OP_SCLASS\tR%d\tR%d\t", GETARG_A(c), GETARG_B(c)); 400 print_lv(mrb, irep, c, RAB); 401 break; 402 case OP_TCLASS: 403 printf("OP_TCLASS\tR%d\t\t", GETARG_A(c)); 404 print_lv(mrb, irep, c, RA); 405 break; 406 case OP_ERR: 407 { 408 mrb_value v = irep->pool[GETARG_Bx(c)]; 453 mrb_value v = irep->pool[a]; 409 454 mrb_value s = mrb_str_dump(mrb, mrb_str_new(mrb, RSTRING_PTR(v), RSTRING_LEN(v))); 410 455 printf("OP_ERR\t%s\n", RSTRING_PTR(s)); 411 456 } 412 457 break; 413 case OP_EPUSH: 414 printf("OP_EPUSH\t:I(%+d)\n", GETARG_Bx(c)+1); 415 break; 416 case OP_ONERR: 417 printf("OP_ONERR\t%03d\n", i+GETARG_sBx(c)); 418 break; 419 case OP_RESCUE: 420 { 421 int a = GETARG_A(c); 422 int b = GETARG_B(c); 423 int cnt = GETARG_C(c); 424 425 if (b == 0) { 426 printf("OP_RESCUE\tR%d\t\t%s", a, cnt ? "cont" : ""); 427 print_lv(mrb, irep, c, RA); 428 break; 429 } 430 else { 431 printf("OP_RESCUE\tR%d\tR%d\t%s", a, b, cnt ? "cont" : ""); 432 print_lv(mrb, irep, c, RAB); 433 break; 434 } 458 CASE(OP_EPUSH, B): 459 printf("OP_EPUSH\t\t:I(%d:%p)\n", a, irep->reps[a]); 460 break; 461 CASE(OP_ONERR, S): 462 printf("OP_ONERR\t%03d\n", a); 463 break; 464 CASE(OP_EXCEPT, B): 465 printf("OP_EXCEPT\tR%d\t\t", a); 466 print_lv_a(mrb, irep, a); 467 break; 468 CASE(OP_RESCUE, BB): 469 printf("OP_RESCUE\tR%d\tR%d", a, b); 470 print_lv_ab(mrb, irep, a, b); 471 break; 472 CASE(OP_RAISE, B): 473 printf("OP_RAISE\tR%d\t\t", a); 474 print_lv_a(mrb, irep, a); 475 break; 476 CASE(OP_POPERR, B): 477 printf("OP_POPERR\t%d\t\t\n", a); 478 break; 479 CASE(OP_EPOP, B): 480 printf("OP_EPOP\t%d\n", a); 481 break; 482 483 CASE(OP_DEBUG, BBB): 484 printf("OP_DEBUG\t%d\t%d\t%d\n", a, b, c); 485 break; 486 487 CASE(OP_STOP, Z): 488 printf("OP_STOP\n"); 489 break; 490 491 CASE(OP_EXT1, Z): 492 ins = READ_B(); 493 printf("OP_EXT1\n"); 494 print_header(mrb, irep, pc-irep->iseq-2); 495 switch (ins) { 496 #define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _1 (); goto L_OP_ ## i; 497 #include "mruby/ops.h" 498 #undef OPCODE 435 499 } 436 500 break; 437 case OP_RAISE: 438 printf("OP_RAISE\tR%d\t\t", GETARG_A(c)); 439 print_lv(mrb, irep, c, RA); 440 break; 441 case OP_POPERR: 442 printf("OP_POPERR\t%d\t\t\n", GETARG_A(c)); 443 break; 444 case OP_EPOP: 445 printf("OP_EPOP\t%d\n", GETARG_A(c)); 501 CASE(OP_EXT2, Z): 502 ins = READ_B(); 503 printf("OP_EXT2\n"); 504 print_header(mrb, irep, pc-irep->iseq-2); 505 switch (ins) { 506 #define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _2 (); goto L_OP_ ## i; 507 #include "mruby/ops.h" 508 #undef OPCODE 509 } 510 break; 511 CASE(OP_EXT3, Z): 512 ins = READ_B(); 513 printf("OP_EXT3\n"); 514 print_header(mrb, irep, pc-irep->iseq-2); 515 switch (ins) { 516 #define OPCODE(i,x) case OP_ ## i: FETCH_ ## x ## _3 (); goto L_OP_ ## i; 517 #include "mruby/ops.h" 518 #undef OPCODE 519 } 446 520 break; 447 521 448 522 default: 449 printf("OP_unknown %d\t%d\t%d\t%d\n", GET_OPCODE(c), 450 GETARG_A(c), GETARG_B(c), GETARG_C(c)); 523 printf("OP_unknown (0x%x)\n", ins); 451 524 break; 452 525 } … … 454 527 } 455 528 printf("\n"); 456 #endif457 529 } 458 530 … … 460 532 codedump_recur(mrb_state *mrb, mrb_irep *irep) 461 533 { 462 size_t i;534 int i; 463 535 464 536 codedump(mrb, irep); … … 467 539 } 468 540 } 541 #endif 469 542 470 543 void 471 544 mrb_codedump_all(mrb_state *mrb, struct RProc *proc) 472 545 { 546 #ifndef MRB_DISABLE_STDIO 473 547 codedump_recur(mrb, proc->body.irep); 474 } 548 #endif 549 }
Note:
See TracChangeset
for help on using the changeset viewer.