blob: 53a1826045a33c34a98179fb20432784b0de47f1 [file] [log] [blame]
Damienf03001f2013-11-17 13:19:33 +00001#include <stdint.h>
2#include <stdlib.h>
3#include <stdio.h>
4#include <string.h>
5#include <assert.h>
6
7#include "misc.h"
Damiend99b0522013-12-21 18:17:45 +00008#include "mpconfig.h"
Damien George55baff42014-01-21 21:40:13 +00009#include "qstr.h"
Damiend99b0522013-12-21 18:17:45 +000010#include "bc0.h"
Damienf03001f2013-11-17 13:19:33 +000011
Damien Georgecbd2f742014-01-19 11:48:48 +000012#if MICROPY_DEBUG_PRINTERS
Damien Georged3ebe482014-01-07 15:20:33 +000013
Damienf03001f2013-11-17 13:19:33 +000014#define DECODE_UINT do { unum = *ip++; if (unum > 127) { unum = ((unum & 0x3f) << 8) | (*ip++); } } while (0)
15#define DECODE_ULABEL do { unum = (ip[0] | (ip[1] << 8)); ip += 2; } while (0)
16#define DECODE_SLABEL do { unum = (ip[0] | (ip[1] << 8)) - 0x8000; ip += 2; } while (0)
17#define DECODE_QSTR do { qstr = *ip++; if (qstr > 127) { qstr = ((qstr & 0x3f) << 8) | (*ip++); } } while (0)
18
Damien Georgecbd2f742014-01-19 11:48:48 +000019void mp_byte_code_print(const byte *ip, int len) {
Damienf03001f2013-11-17 13:19:33 +000020 const byte *ip_start = ip;
Damien George6baf76e2013-12-30 22:32:17 +000021
Damien George08335002014-01-18 23:24:36 +000022 // get code info size
23 machine_uint_t code_info_size = ip[0] | (ip[1] << 8) | (ip[2] << 16) | (ip[3] << 24);
24 ip += code_info_size;
25
Damien George6baf76e2013-12-30 22:32:17 +000026 // decode prelude
27 {
28 uint n_local = *ip++;
29 printf("(NUM_LOCAL %u)\n", n_local);
30 for (; n_local > 0; n_local--) {
31 uint local_num = *ip++;
32 printf("(INIT_CELL %u)\n", local_num);
33 }
34 len -= ip - ip_start;
35 ip_start = ip;
36 }
37
Damienf03001f2013-11-17 13:19:33 +000038 machine_uint_t unum;
39 qstr qstr;
40 while (ip - ip_start < len) {
41 printf("%02u ", (uint)(ip - ip_start));
42 int op = *ip++;
43 switch (op) {
Damiend99b0522013-12-21 18:17:45 +000044 case MP_BC_LOAD_CONST_FALSE:
Damienf03001f2013-11-17 13:19:33 +000045 printf("LOAD_CONST_FALSE");
46 break;
47
Damiend99b0522013-12-21 18:17:45 +000048 case MP_BC_LOAD_CONST_NONE:
Damienf03001f2013-11-17 13:19:33 +000049 printf("LOAD_CONST_NONE");
50 break;
51
Damiend99b0522013-12-21 18:17:45 +000052 case MP_BC_LOAD_CONST_TRUE:
Damienf03001f2013-11-17 13:19:33 +000053 printf("LOAD_CONST_TRUE");
54 break;
55
Damien Georgee9906ac2014-01-04 18:44:46 +000056 case MP_BC_LOAD_CONST_ELLIPSIS:
57 printf("LOAD_CONST_ELLIPSIS");
58 break;
59
Damiend99b0522013-12-21 18:17:45 +000060 case MP_BC_LOAD_CONST_SMALL_INT:
Damienf03001f2013-11-17 13:19:33 +000061 unum = (ip[0] | (ip[1] << 8) | (ip[2] << 16)) - 0x800000;
62 ip += 3;
63 printf("LOAD_CONST_SMALL_INT %d", (int)unum);
64 break;
65
Paul Sokolovsky4b919d02014-01-10 04:16:50 +020066 case MP_BC_LOAD_CONST_INT:
67 DECODE_QSTR;
68 printf("LOAD_CONST_INT %s", qstr_str(qstr));
69 break;
70
Damiend99b0522013-12-21 18:17:45 +000071 case MP_BC_LOAD_CONST_DEC:
Damienf03001f2013-11-17 13:19:33 +000072 DECODE_QSTR;
Damien George08d07552014-01-29 18:58:52 +000073 printf("LOAD_CONST_DEC %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +000074 break;
75
Damiend99b0522013-12-21 18:17:45 +000076 case MP_BC_LOAD_CONST_ID:
Damienf03001f2013-11-17 13:19:33 +000077 DECODE_QSTR;
Damienc1075dd2013-11-25 23:39:36 +000078 printf("LOAD_CONST_ID %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +000079 break;
80
Damiend99b0522013-12-21 18:17:45 +000081 case MP_BC_LOAD_CONST_STRING:
Damienf03001f2013-11-17 13:19:33 +000082 DECODE_QSTR;
Damienff099f32013-11-26 15:14:50 +000083 printf("LOAD_CONST_STRING %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +000084 break;
Damienf03001f2013-11-17 13:19:33 +000085
Damiend99b0522013-12-21 18:17:45 +000086 case MP_BC_LOAD_FAST_0:
Damienf03001f2013-11-17 13:19:33 +000087 printf("LOAD_FAST_0");
88 break;
89
Damiend99b0522013-12-21 18:17:45 +000090 case MP_BC_LOAD_FAST_1:
Damienf03001f2013-11-17 13:19:33 +000091 printf("LOAD_FAST_1");
92 break;
93
Damiend99b0522013-12-21 18:17:45 +000094 case MP_BC_LOAD_FAST_2:
Damienf03001f2013-11-17 13:19:33 +000095 printf("LOAD_FAST_2");
96 break;
97
Damiend99b0522013-12-21 18:17:45 +000098 case MP_BC_LOAD_FAST_N:
Damienf03001f2013-11-17 13:19:33 +000099 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200100 printf("LOAD_FAST_N " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000101 break;
Damienf03001f2013-11-17 13:19:33 +0000102
Damien George6baf76e2013-12-30 22:32:17 +0000103 case MP_BC_LOAD_DEREF:
104 DECODE_UINT;
105 printf("LOAD_DEREF " UINT_FMT, unum);
106 break;
107
Damiend99b0522013-12-21 18:17:45 +0000108 case MP_BC_LOAD_NAME:
Damienf03001f2013-11-17 13:19:33 +0000109 DECODE_QSTR;
110 printf("LOAD_NAME %s", qstr_str(qstr));
111 break;
112
Damiend99b0522013-12-21 18:17:45 +0000113 case MP_BC_LOAD_GLOBAL:
Damienf03001f2013-11-17 13:19:33 +0000114 DECODE_QSTR;
115 printf("LOAD_GLOBAL %s", qstr_str(qstr));
116 break;
117
Damiend99b0522013-12-21 18:17:45 +0000118 case MP_BC_LOAD_ATTR:
Damienf03001f2013-11-17 13:19:33 +0000119 DECODE_QSTR;
Damienc1075dd2013-11-25 23:39:36 +0000120 printf("LOAD_ATTR %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +0000121 break;
Damienf03001f2013-11-17 13:19:33 +0000122
Damiend99b0522013-12-21 18:17:45 +0000123 case MP_BC_LOAD_METHOD:
Damienf03001f2013-11-17 13:19:33 +0000124 DECODE_QSTR;
125 printf("LOAD_METHOD %s", qstr_str(qstr));
126 break;
127
Damiend99b0522013-12-21 18:17:45 +0000128 case MP_BC_LOAD_BUILD_CLASS:
Damienc1075dd2013-11-25 23:39:36 +0000129 printf("LOAD_BUILD_CLASS");
Damienf03001f2013-11-17 13:19:33 +0000130 break;
Damienf03001f2013-11-17 13:19:33 +0000131
Damiend99b0522013-12-21 18:17:45 +0000132 case MP_BC_STORE_FAST_0:
Damienf03001f2013-11-17 13:19:33 +0000133 printf("STORE_FAST_0");
134 break;
135
Damiend99b0522013-12-21 18:17:45 +0000136 case MP_BC_STORE_FAST_1:
Damienf03001f2013-11-17 13:19:33 +0000137 printf("STORE_FAST_1");
138 break;
139
Damiend99b0522013-12-21 18:17:45 +0000140 case MP_BC_STORE_FAST_2:
Damienf03001f2013-11-17 13:19:33 +0000141 printf("STORE_FAST_2");
142 break;
143
Damiend99b0522013-12-21 18:17:45 +0000144 case MP_BC_STORE_FAST_N:
Damienf03001f2013-11-17 13:19:33 +0000145 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200146 printf("STORE_FAST_N " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000147 break;
Damienf03001f2013-11-17 13:19:33 +0000148
Damien George6baf76e2013-12-30 22:32:17 +0000149 case MP_BC_STORE_DEREF:
150 DECODE_UINT;
151 printf("STORE_DEREF " UINT_FMT, unum);
152 break;
153
Damiend99b0522013-12-21 18:17:45 +0000154 case MP_BC_STORE_NAME:
Damienf03001f2013-11-17 13:19:33 +0000155 DECODE_QSTR;
156 printf("STORE_NAME %s", qstr_str(qstr));
157 break;
158
Damiend99b0522013-12-21 18:17:45 +0000159 case MP_BC_STORE_GLOBAL:
Damienf03001f2013-11-17 13:19:33 +0000160 DECODE_QSTR;
Damien George66028ab2014-01-03 14:03:48 +0000161 printf("STORE_GLOBAL %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +0000162 break;
163
Damiend99b0522013-12-21 18:17:45 +0000164 case MP_BC_STORE_ATTR:
Damienf03001f2013-11-17 13:19:33 +0000165 DECODE_QSTR;
Damienc1075dd2013-11-25 23:39:36 +0000166 printf("STORE_ATTR %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +0000167 break;
168
Damiend99b0522013-12-21 18:17:45 +0000169 case MP_BC_STORE_SUBSCR:
Damienff099f32013-11-26 15:14:50 +0000170 printf("STORE_SUBSCR");
Damienf03001f2013-11-17 13:19:33 +0000171 break;
172
Damiend99b0522013-12-21 18:17:45 +0000173 case MP_BC_DUP_TOP:
Damien8f9e2ee2013-12-29 16:54:59 +0000174 printf("DUP_TOP");
Damienf03001f2013-11-17 13:19:33 +0000175 break;
176
Damiend99b0522013-12-21 18:17:45 +0000177 case MP_BC_DUP_TOP_TWO:
Damienff099f32013-11-26 15:14:50 +0000178 printf("DUP_TOP_TWO");
Damienf03001f2013-11-17 13:19:33 +0000179 break;
Damienf03001f2013-11-17 13:19:33 +0000180
Damiend99b0522013-12-21 18:17:45 +0000181 case MP_BC_POP_TOP:
Damienf03001f2013-11-17 13:19:33 +0000182 printf("POP_TOP");
183 break;
184
Damiend99b0522013-12-21 18:17:45 +0000185 case MP_BC_ROT_TWO:
Paul Sokolovsky4b919d02014-01-10 04:16:50 +0200186 printf("ROT_TWO");
Damienf03001f2013-11-17 13:19:33 +0000187 break;
188
Damiend99b0522013-12-21 18:17:45 +0000189 case MP_BC_ROT_THREE:
Damienff099f32013-11-26 15:14:50 +0000190 printf("ROT_THREE");
Damienf03001f2013-11-17 13:19:33 +0000191 break;
Damienf03001f2013-11-17 13:19:33 +0000192
Damiend99b0522013-12-21 18:17:45 +0000193 case MP_BC_JUMP:
Damienf03001f2013-11-17 13:19:33 +0000194 DECODE_SLABEL;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200195 printf("JUMP " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000196 break;
197
Damiend99b0522013-12-21 18:17:45 +0000198 case MP_BC_POP_JUMP_IF_TRUE:
Damienf03001f2013-11-17 13:19:33 +0000199 DECODE_SLABEL;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200200 printf("POP_JUMP_IF_TRUE " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000201 break;
202
Damiend99b0522013-12-21 18:17:45 +0000203 case MP_BC_POP_JUMP_IF_FALSE:
Damienf03001f2013-11-17 13:19:33 +0000204 DECODE_SLABEL;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200205 printf("POP_JUMP_IF_FALSE " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000206 break;
207
Damiend99b0522013-12-21 18:17:45 +0000208 case MP_BC_JUMP_IF_TRUE_OR_POP:
Damienf03001f2013-11-17 13:19:33 +0000209 DECODE_SLABEL;
Damien Georgee02b2d42014-01-19 01:14:37 +0000210 printf("JUMP_IF_TRUE_OR_POP " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000211 break;
212
Damiend99b0522013-12-21 18:17:45 +0000213 case MP_BC_JUMP_IF_FALSE_OR_POP:
Damienf03001f2013-11-17 13:19:33 +0000214 DECODE_SLABEL;
Damien Georgee02b2d42014-01-19 01:14:37 +0000215 printf("JUMP_IF_FALSE_OR_POP " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000216 break;
217
Paul Sokolovsky7ee8e462014-01-31 19:33:31 +0200218 case MP_BC_SETUP_LOOP:
219 DECODE_ULABEL; // loop labels are always forward
220 printf("SETUP_LOOP " UINT_FMT, ip + unum - ip_start);
221 break;
222
223 case MP_BC_BREAK_LOOP:
224 DECODE_ULABEL; // loop labels are always forward
225 printf("BREAK_LOOP " UINT_FMT, ip + unum - ip_start);
226 break;
227
228 case MP_BC_CONTINUE_LOOP:
229 DECODE_ULABEL; // loop labels are always forward
230 printf("CONTINUE_LOOP " UINT_FMT, ip + unum - ip_start);
231 break;
232
Damiend99b0522013-12-21 18:17:45 +0000233 case MP_BC_SETUP_EXCEPT:
Damienf03001f2013-11-17 13:19:33 +0000234 DECODE_ULABEL; // except labels are always forward
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200235 printf("SETUP_EXCEPT " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000236 break;
237
Paul Sokolovsky7ee8e462014-01-31 19:33:31 +0200238 case MP_BC_SETUP_FINALLY:
239 DECODE_ULABEL; // except labels are always forward
240 printf("SETUP_FINALLY " UINT_FMT, ip + unum - ip_start);
241 break;
242
Damiend99b0522013-12-21 18:17:45 +0000243 case MP_BC_END_FINALLY:
Damienf03001f2013-11-17 13:19:33 +0000244 // if TOS is an exception, reraises the exception (3 values on TOS)
245 // if TOS is an integer, does something else
246 // if TOS is None, just pops it and continues
247 // else error
Damien8f9e2ee2013-12-29 16:54:59 +0000248 printf("END_FINALLY");
Damienf03001f2013-11-17 13:19:33 +0000249 break;
250
Damiend99b0522013-12-21 18:17:45 +0000251 case MP_BC_GET_ITER:
Damienff099f32013-11-26 15:14:50 +0000252 printf("GET_ITER");
Damienf03001f2013-11-17 13:19:33 +0000253 break;
254
Damiend99b0522013-12-21 18:17:45 +0000255 case MP_BC_FOR_ITER:
Damienf03001f2013-11-17 13:19:33 +0000256 DECODE_ULABEL; // the jump offset if iteration finishes; for labels are always forward
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200257 printf("FOR_ITER " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000258 break;
259
Damiend99b0522013-12-21 18:17:45 +0000260 case MP_BC_POP_BLOCK:
Damienf03001f2013-11-17 13:19:33 +0000261 // pops block and restores the stack
Damien8f9e2ee2013-12-29 16:54:59 +0000262 printf("POP_BLOCK");
Damienf03001f2013-11-17 13:19:33 +0000263 break;
264
Damiend99b0522013-12-21 18:17:45 +0000265 case MP_BC_POP_EXCEPT:
Damienf03001f2013-11-17 13:19:33 +0000266 // pops block, checks it's an exception block, and restores the stack, saving the 3 exception values to local threadstate
Damien8f9e2ee2013-12-29 16:54:59 +0000267 printf("POP_EXCEPT");
Damienf03001f2013-11-17 13:19:33 +0000268 break;
269
Damien8f9e2ee2013-12-29 16:54:59 +0000270 /*
Damiend99b0522013-12-21 18:17:45 +0000271 case MP_BC_UNARY_OP:
Damienf03001f2013-11-17 13:19:33 +0000272 unum = *ip++;
273 *sp = rt_unary_op(unum, *sp);
274 break;
275 */
276
Damiend99b0522013-12-21 18:17:45 +0000277 case MP_BC_BINARY_OP:
Damienf03001f2013-11-17 13:19:33 +0000278 unum = *ip++;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200279 printf("BINARY_OP " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000280 break;
281
Damiend99b0522013-12-21 18:17:45 +0000282 case MP_BC_BUILD_TUPLE:
Damienf03001f2013-11-17 13:19:33 +0000283 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200284 printf("BUILD_TUPLE " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000285 break;
286
Damiend99b0522013-12-21 18:17:45 +0000287 case MP_BC_BUILD_LIST:
Damienf03001f2013-11-17 13:19:33 +0000288 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200289 printf("BUILD_LIST " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000290 break;
291
Damiend99b0522013-12-21 18:17:45 +0000292 case MP_BC_LIST_APPEND:
Damienf03001f2013-11-17 13:19:33 +0000293 DECODE_UINT;
Damien George27bf5b82014-01-02 18:15:33 +0000294 printf("LIST_APPEND " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000295 break;
296
Damiend99b0522013-12-21 18:17:45 +0000297 case MP_BC_BUILD_MAP:
Damienf03001f2013-11-17 13:19:33 +0000298 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200299 printf("BUILD_MAP " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000300 break;
301
Damiend99b0522013-12-21 18:17:45 +0000302 case MP_BC_STORE_MAP:
Damien George20006db2014-01-18 14:10:48 +0000303 printf("STORE_MAP");
Damienf03001f2013-11-17 13:19:33 +0000304 break;
305
Damien George20006db2014-01-18 14:10:48 +0000306 /*
Damiend99b0522013-12-21 18:17:45 +0000307 case MP_BC_MAP_ADD:
Damienf03001f2013-11-17 13:19:33 +0000308 DECODE_UINT;
309 // I think it's guaranteed by the compiler that sp[unum + 1] is a map
310 rt_store_map(sp[unum + 1], sp[0], sp[1]);
311 sp += 2;
312 break;
Damiendae7eb72013-12-29 22:32:51 +0000313 */
Damienf03001f2013-11-17 13:19:33 +0000314
Damiend99b0522013-12-21 18:17:45 +0000315 case MP_BC_BUILD_SET:
Damienf03001f2013-11-17 13:19:33 +0000316 DECODE_UINT;
Damien George212c2962013-12-30 12:52:32 +0000317 printf("BUILD_SET " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000318 break;
319
Damiend99b0522013-12-21 18:17:45 +0000320 case MP_BC_SET_ADD:
Damienf03001f2013-11-17 13:19:33 +0000321 DECODE_UINT;
Damien George212c2962013-12-30 12:52:32 +0000322 printf("SET_ADD " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000323 break;
Damienf03001f2013-11-17 13:19:33 +0000324
Damien George20006db2014-01-18 14:10:48 +0000325#if MICROPY_ENABLE_SLICE
326 case MP_BC_BUILD_SLICE:
327 DECODE_UINT;
328 printf("BUILD_SLICE " UINT_FMT, unum);
329 break;
330#endif
331
Damiend99b0522013-12-21 18:17:45 +0000332 case MP_BC_UNPACK_SEQUENCE:
Damienff099f32013-11-26 15:14:50 +0000333 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200334 printf("UNPACK_SEQUENCE " UINT_FMT, unum);
Damienff099f32013-11-26 15:14:50 +0000335 break;
336
Damiend99b0522013-12-21 18:17:45 +0000337 case MP_BC_MAKE_FUNCTION:
Damienf03001f2013-11-17 13:19:33 +0000338 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200339 printf("MAKE_FUNCTION " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000340 break;
341
Paul Sokolovsky90750022014-02-01 15:05:04 +0200342 case MP_BC_MAKE_FUNCTION_DEFARGS:
343 DECODE_UINT;
344 printf("MAKE_FUNCTION_DEFARGS " UINT_FMT, unum);
345 break;
346
Damien George6baf76e2013-12-30 22:32:17 +0000347 case MP_BC_MAKE_CLOSURE:
348 DECODE_UINT;
349 printf("MAKE_CLOSURE " UINT_FMT, unum);
350 break;
351
Damiend99b0522013-12-21 18:17:45 +0000352 case MP_BC_CALL_FUNCTION:
Damienf03001f2013-11-17 13:19:33 +0000353 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200354 printf("CALL_FUNCTION n=" UINT_FMT " nkw=" UINT_FMT, unum & 0xff, (unum >> 8) & 0xff);
Damienf03001f2013-11-17 13:19:33 +0000355 break;
356
Damiend99b0522013-12-21 18:17:45 +0000357 case MP_BC_CALL_METHOD:
Damienf03001f2013-11-17 13:19:33 +0000358 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200359 printf("CALL_METHOD n=" UINT_FMT " nkw=" UINT_FMT, unum & 0xff, (unum >> 8) & 0xff);
Damienf03001f2013-11-17 13:19:33 +0000360 break;
361
Damiend99b0522013-12-21 18:17:45 +0000362 case MP_BC_RETURN_VALUE:
Damienf03001f2013-11-17 13:19:33 +0000363 printf("RETURN_VALUE");
364 break;
365
Paul Sokolovsky4b919d02014-01-10 04:16:50 +0200366 case MP_BC_RAISE_VARARGS:
367 unum = *ip++;
368 printf("RAISE_VARARGS " UINT_FMT, unum);
369 break;
370
Damiend99b0522013-12-21 18:17:45 +0000371 case MP_BC_YIELD_VALUE:
Damien George27bf5b82014-01-02 18:15:33 +0000372 printf("YIELD_VALUE");
373 break;
Damienf03001f2013-11-17 13:19:33 +0000374
Damien George66028ab2014-01-03 14:03:48 +0000375 case MP_BC_IMPORT_NAME:
376 DECODE_QSTR;
Damien George08d07552014-01-29 18:58:52 +0000377 printf("IMPORT_NAME %s", qstr_str(qstr));
Damien George66028ab2014-01-03 14:03:48 +0000378 break;
379
380 case MP_BC_IMPORT_FROM:
381 DECODE_QSTR;
Damien George08d07552014-01-29 18:58:52 +0000382 printf("IMPORT_FROM %s", qstr_str(qstr));
Damien George66028ab2014-01-03 14:03:48 +0000383 break;
384
Damienf03001f2013-11-17 13:19:33 +0000385 default:
386 printf("code %p, byte code 0x%02x not implemented\n", ip, op);
387 assert(0);
388 return;
389 }
390 printf("\n");
391 }
392}
Damien Georged3ebe482014-01-07 15:20:33 +0000393
Damien Georgecbd2f742014-01-19 11:48:48 +0000394#endif // MICROPY_DEBUG_PRINTERS