blob: 837ee7611fd6fcd4c1f93549194188afa8b42929 [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
Paul Sokolovsky047cd402014-02-19 15:47:59 +020060 case MP_BC_LOAD_CONST_SMALL_INT: {
61 int num = 0;
62 if ((ip[0] & 0x40) != 0) {
63 // Number is negative
64 num--;
65 }
66 do {
67 num = (num << 7) | (*ip & 0x7f);
68 } while ((*ip++ & 0x80) != 0);
69 printf("LOAD_CONST_SMALL_INT %d", num);
Damienf03001f2013-11-17 13:19:33 +000070 break;
Paul Sokolovsky047cd402014-02-19 15:47:59 +020071 }
Damienf03001f2013-11-17 13:19:33 +000072
Paul Sokolovsky4b919d02014-01-10 04:16:50 +020073 case MP_BC_LOAD_CONST_INT:
74 DECODE_QSTR;
75 printf("LOAD_CONST_INT %s", qstr_str(qstr));
76 break;
77
Damiend99b0522013-12-21 18:17:45 +000078 case MP_BC_LOAD_CONST_DEC:
Damienf03001f2013-11-17 13:19:33 +000079 DECODE_QSTR;
Damien George08d07552014-01-29 18:58:52 +000080 printf("LOAD_CONST_DEC %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +000081 break;
82
Damiend99b0522013-12-21 18:17:45 +000083 case MP_BC_LOAD_CONST_ID:
Damienf03001f2013-11-17 13:19:33 +000084 DECODE_QSTR;
Damienc1075dd2013-11-25 23:39:36 +000085 printf("LOAD_CONST_ID %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +000086 break;
87
Damiend99b0522013-12-21 18:17:45 +000088 case MP_BC_LOAD_CONST_STRING:
Damienf03001f2013-11-17 13:19:33 +000089 DECODE_QSTR;
Damienff099f32013-11-26 15:14:50 +000090 printf("LOAD_CONST_STRING %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +000091 break;
Damienf03001f2013-11-17 13:19:33 +000092
Damiend99b0522013-12-21 18:17:45 +000093 case MP_BC_LOAD_FAST_0:
Damienf03001f2013-11-17 13:19:33 +000094 printf("LOAD_FAST_0");
95 break;
96
Damiend99b0522013-12-21 18:17:45 +000097 case MP_BC_LOAD_FAST_1:
Damienf03001f2013-11-17 13:19:33 +000098 printf("LOAD_FAST_1");
99 break;
100
Damiend99b0522013-12-21 18:17:45 +0000101 case MP_BC_LOAD_FAST_2:
Damienf03001f2013-11-17 13:19:33 +0000102 printf("LOAD_FAST_2");
103 break;
104
Damiend99b0522013-12-21 18:17:45 +0000105 case MP_BC_LOAD_FAST_N:
Damienf03001f2013-11-17 13:19:33 +0000106 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200107 printf("LOAD_FAST_N " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000108 break;
Damienf03001f2013-11-17 13:19:33 +0000109
Damien George6baf76e2013-12-30 22:32:17 +0000110 case MP_BC_LOAD_DEREF:
111 DECODE_UINT;
112 printf("LOAD_DEREF " UINT_FMT, unum);
113 break;
114
Damiend99b0522013-12-21 18:17:45 +0000115 case MP_BC_LOAD_NAME:
Damienf03001f2013-11-17 13:19:33 +0000116 DECODE_QSTR;
117 printf("LOAD_NAME %s", qstr_str(qstr));
118 break;
119
Damiend99b0522013-12-21 18:17:45 +0000120 case MP_BC_LOAD_GLOBAL:
Damienf03001f2013-11-17 13:19:33 +0000121 DECODE_QSTR;
122 printf("LOAD_GLOBAL %s", qstr_str(qstr));
123 break;
124
Damiend99b0522013-12-21 18:17:45 +0000125 case MP_BC_LOAD_ATTR:
Damienf03001f2013-11-17 13:19:33 +0000126 DECODE_QSTR;
Damienc1075dd2013-11-25 23:39:36 +0000127 printf("LOAD_ATTR %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +0000128 break;
Damienf03001f2013-11-17 13:19:33 +0000129
Damiend99b0522013-12-21 18:17:45 +0000130 case MP_BC_LOAD_METHOD:
Damienf03001f2013-11-17 13:19:33 +0000131 DECODE_QSTR;
132 printf("LOAD_METHOD %s", qstr_str(qstr));
133 break;
134
Damiend99b0522013-12-21 18:17:45 +0000135 case MP_BC_LOAD_BUILD_CLASS:
Damienc1075dd2013-11-25 23:39:36 +0000136 printf("LOAD_BUILD_CLASS");
Damienf03001f2013-11-17 13:19:33 +0000137 break;
Damienf03001f2013-11-17 13:19:33 +0000138
Damiend99b0522013-12-21 18:17:45 +0000139 case MP_BC_STORE_FAST_0:
Damienf03001f2013-11-17 13:19:33 +0000140 printf("STORE_FAST_0");
141 break;
142
Damiend99b0522013-12-21 18:17:45 +0000143 case MP_BC_STORE_FAST_1:
Damienf03001f2013-11-17 13:19:33 +0000144 printf("STORE_FAST_1");
145 break;
146
Damiend99b0522013-12-21 18:17:45 +0000147 case MP_BC_STORE_FAST_2:
Damienf03001f2013-11-17 13:19:33 +0000148 printf("STORE_FAST_2");
149 break;
150
Damiend99b0522013-12-21 18:17:45 +0000151 case MP_BC_STORE_FAST_N:
Damienf03001f2013-11-17 13:19:33 +0000152 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200153 printf("STORE_FAST_N " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000154 break;
Damienf03001f2013-11-17 13:19:33 +0000155
Damien George6baf76e2013-12-30 22:32:17 +0000156 case MP_BC_STORE_DEREF:
157 DECODE_UINT;
158 printf("STORE_DEREF " UINT_FMT, unum);
159 break;
160
Damiend99b0522013-12-21 18:17:45 +0000161 case MP_BC_STORE_NAME:
Damienf03001f2013-11-17 13:19:33 +0000162 DECODE_QSTR;
163 printf("STORE_NAME %s", qstr_str(qstr));
164 break;
165
Damiend99b0522013-12-21 18:17:45 +0000166 case MP_BC_STORE_GLOBAL:
Damienf03001f2013-11-17 13:19:33 +0000167 DECODE_QSTR;
Damien George66028ab2014-01-03 14:03:48 +0000168 printf("STORE_GLOBAL %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +0000169 break;
170
Damiend99b0522013-12-21 18:17:45 +0000171 case MP_BC_STORE_ATTR:
Damienf03001f2013-11-17 13:19:33 +0000172 DECODE_QSTR;
Damienc1075dd2013-11-25 23:39:36 +0000173 printf("STORE_ATTR %s", qstr_str(qstr));
Damienf03001f2013-11-17 13:19:33 +0000174 break;
175
Damiend99b0522013-12-21 18:17:45 +0000176 case MP_BC_STORE_SUBSCR:
Damienff099f32013-11-26 15:14:50 +0000177 printf("STORE_SUBSCR");
Damienf03001f2013-11-17 13:19:33 +0000178 break;
179
Damien Georgeddaf6c12014-02-06 20:31:32 +0000180 case MP_BC_DELETE_FAST_N:
181 DECODE_UINT;
182 printf("DELETE_FAST_N " UINT_FMT, unum);
183 break;
184
185 case MP_BC_DELETE_NAME:
186 DECODE_QSTR;
187 printf("DELETE_NAME %s", qstr_str(qstr));
188 break;
189
Damiend99b0522013-12-21 18:17:45 +0000190 case MP_BC_DUP_TOP:
Damien8f9e2ee2013-12-29 16:54:59 +0000191 printf("DUP_TOP");
Damienf03001f2013-11-17 13:19:33 +0000192 break;
193
Damiend99b0522013-12-21 18:17:45 +0000194 case MP_BC_DUP_TOP_TWO:
Damienff099f32013-11-26 15:14:50 +0000195 printf("DUP_TOP_TWO");
Damienf03001f2013-11-17 13:19:33 +0000196 break;
Damienf03001f2013-11-17 13:19:33 +0000197
Damiend99b0522013-12-21 18:17:45 +0000198 case MP_BC_POP_TOP:
Damienf03001f2013-11-17 13:19:33 +0000199 printf("POP_TOP");
200 break;
201
Damiend99b0522013-12-21 18:17:45 +0000202 case MP_BC_ROT_TWO:
Paul Sokolovsky4b919d02014-01-10 04:16:50 +0200203 printf("ROT_TWO");
Damienf03001f2013-11-17 13:19:33 +0000204 break;
205
Damiend99b0522013-12-21 18:17:45 +0000206 case MP_BC_ROT_THREE:
Damienff099f32013-11-26 15:14:50 +0000207 printf("ROT_THREE");
Damienf03001f2013-11-17 13:19:33 +0000208 break;
Damienf03001f2013-11-17 13:19:33 +0000209
Damiend99b0522013-12-21 18:17:45 +0000210 case MP_BC_JUMP:
Damienf03001f2013-11-17 13:19:33 +0000211 DECODE_SLABEL;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200212 printf("JUMP " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000213 break;
214
Damiend99b0522013-12-21 18:17:45 +0000215 case MP_BC_POP_JUMP_IF_TRUE:
Damienf03001f2013-11-17 13:19:33 +0000216 DECODE_SLABEL;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200217 printf("POP_JUMP_IF_TRUE " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000218 break;
219
Damiend99b0522013-12-21 18:17:45 +0000220 case MP_BC_POP_JUMP_IF_FALSE:
Damienf03001f2013-11-17 13:19:33 +0000221 DECODE_SLABEL;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200222 printf("POP_JUMP_IF_FALSE " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000223 break;
224
Damiend99b0522013-12-21 18:17:45 +0000225 case MP_BC_JUMP_IF_TRUE_OR_POP:
Damienf03001f2013-11-17 13:19:33 +0000226 DECODE_SLABEL;
Damien Georgee02b2d42014-01-19 01:14:37 +0000227 printf("JUMP_IF_TRUE_OR_POP " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000228 break;
229
Damiend99b0522013-12-21 18:17:45 +0000230 case MP_BC_JUMP_IF_FALSE_OR_POP:
Damienf03001f2013-11-17 13:19:33 +0000231 DECODE_SLABEL;
Damien Georgee02b2d42014-01-19 01:14:37 +0000232 printf("JUMP_IF_FALSE_OR_POP " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000233 break;
234
Paul Sokolovsky7ee8e462014-01-31 19:33:31 +0200235 case MP_BC_SETUP_LOOP:
236 DECODE_ULABEL; // loop labels are always forward
237 printf("SETUP_LOOP " UINT_FMT, ip + unum - ip_start);
238 break;
239
Damien Georgecbddb272014-02-01 20:08:18 +0000240 case MP_BC_UNWIND_JUMP:
241 DECODE_SLABEL;
242 printf("UNWIND_JUMP " UINT_FMT " %d", ip + unum - ip_start, *ip);
243 ip += 1;
Paul Sokolovsky7ee8e462014-01-31 19:33:31 +0200244 break;
245
Damiend99b0522013-12-21 18:17:45 +0000246 case MP_BC_SETUP_EXCEPT:
Damienf03001f2013-11-17 13:19:33 +0000247 DECODE_ULABEL; // except labels are always forward
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200248 printf("SETUP_EXCEPT " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000249 break;
250
Paul Sokolovsky7ee8e462014-01-31 19:33:31 +0200251 case MP_BC_SETUP_FINALLY:
252 DECODE_ULABEL; // except labels are always forward
253 printf("SETUP_FINALLY " UINT_FMT, ip + unum - ip_start);
254 break;
255
Damiend99b0522013-12-21 18:17:45 +0000256 case MP_BC_END_FINALLY:
Damienf03001f2013-11-17 13:19:33 +0000257 // if TOS is an exception, reraises the exception (3 values on TOS)
258 // if TOS is an integer, does something else
259 // if TOS is None, just pops it and continues
260 // else error
Damien8f9e2ee2013-12-29 16:54:59 +0000261 printf("END_FINALLY");
Damienf03001f2013-11-17 13:19:33 +0000262 break;
263
Damiend99b0522013-12-21 18:17:45 +0000264 case MP_BC_GET_ITER:
Damienff099f32013-11-26 15:14:50 +0000265 printf("GET_ITER");
Damienf03001f2013-11-17 13:19:33 +0000266 break;
267
Damiend99b0522013-12-21 18:17:45 +0000268 case MP_BC_FOR_ITER:
Damienf03001f2013-11-17 13:19:33 +0000269 DECODE_ULABEL; // the jump offset if iteration finishes; for labels are always forward
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200270 printf("FOR_ITER " UINT_FMT, ip + unum - ip_start);
Damienf03001f2013-11-17 13:19:33 +0000271 break;
272
Damiend99b0522013-12-21 18:17:45 +0000273 case MP_BC_POP_BLOCK:
Damienf03001f2013-11-17 13:19:33 +0000274 // pops block and restores the stack
Damien8f9e2ee2013-12-29 16:54:59 +0000275 printf("POP_BLOCK");
Damienf03001f2013-11-17 13:19:33 +0000276 break;
277
Damiend99b0522013-12-21 18:17:45 +0000278 case MP_BC_POP_EXCEPT:
Damienf03001f2013-11-17 13:19:33 +0000279 // 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 +0000280 printf("POP_EXCEPT");
Damienf03001f2013-11-17 13:19:33 +0000281 break;
282
Damien George9aa2a522014-02-01 23:04:09 +0000283 case MP_BC_NOT:
284 printf("NOT");
285 break;
286
Damiend99b0522013-12-21 18:17:45 +0000287 case MP_BC_UNARY_OP:
Damienf03001f2013-11-17 13:19:33 +0000288 unum = *ip++;
Damien George9aa2a522014-02-01 23:04:09 +0000289 printf("UNARY_OP " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000290 break;
Damienf03001f2013-11-17 13:19:33 +0000291
Damiend99b0522013-12-21 18:17:45 +0000292 case MP_BC_BINARY_OP:
Damienf03001f2013-11-17 13:19:33 +0000293 unum = *ip++;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200294 printf("BINARY_OP " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000295 break;
296
Damiend99b0522013-12-21 18:17:45 +0000297 case MP_BC_BUILD_TUPLE:
Damienf03001f2013-11-17 13:19:33 +0000298 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200299 printf("BUILD_TUPLE " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000300 break;
301
Damiend99b0522013-12-21 18:17:45 +0000302 case MP_BC_BUILD_LIST:
Damienf03001f2013-11-17 13:19:33 +0000303 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200304 printf("BUILD_LIST " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000305 break;
306
Damiend99b0522013-12-21 18:17:45 +0000307 case MP_BC_LIST_APPEND:
Damienf03001f2013-11-17 13:19:33 +0000308 DECODE_UINT;
Damien George27bf5b82014-01-02 18:15:33 +0000309 printf("LIST_APPEND " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000310 break;
311
Damiend99b0522013-12-21 18:17:45 +0000312 case MP_BC_BUILD_MAP:
Damienf03001f2013-11-17 13:19:33 +0000313 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200314 printf("BUILD_MAP " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000315 break;
316
Damiend99b0522013-12-21 18:17:45 +0000317 case MP_BC_STORE_MAP:
Damien George20006db2014-01-18 14:10:48 +0000318 printf("STORE_MAP");
Damienf03001f2013-11-17 13:19:33 +0000319 break;
320
Damien George20006db2014-01-18 14:10:48 +0000321 /*
Damiend99b0522013-12-21 18:17:45 +0000322 case MP_BC_MAP_ADD:
Damienf03001f2013-11-17 13:19:33 +0000323 DECODE_UINT;
324 // I think it's guaranteed by the compiler that sp[unum + 1] is a map
325 rt_store_map(sp[unum + 1], sp[0], sp[1]);
326 sp += 2;
327 break;
Damiendae7eb72013-12-29 22:32:51 +0000328 */
Damienf03001f2013-11-17 13:19:33 +0000329
Damiend99b0522013-12-21 18:17:45 +0000330 case MP_BC_BUILD_SET:
Damienf03001f2013-11-17 13:19:33 +0000331 DECODE_UINT;
Damien George212c2962013-12-30 12:52:32 +0000332 printf("BUILD_SET " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000333 break;
334
Damiend99b0522013-12-21 18:17:45 +0000335 case MP_BC_SET_ADD:
Damienf03001f2013-11-17 13:19:33 +0000336 DECODE_UINT;
Damien George212c2962013-12-30 12:52:32 +0000337 printf("SET_ADD " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000338 break;
Damienf03001f2013-11-17 13:19:33 +0000339
Damien George20006db2014-01-18 14:10:48 +0000340#if MICROPY_ENABLE_SLICE
341 case MP_BC_BUILD_SLICE:
342 DECODE_UINT;
343 printf("BUILD_SLICE " UINT_FMT, unum);
344 break;
345#endif
346
Damiend99b0522013-12-21 18:17:45 +0000347 case MP_BC_UNPACK_SEQUENCE:
Damienff099f32013-11-26 15:14:50 +0000348 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200349 printf("UNPACK_SEQUENCE " UINT_FMT, unum);
Damienff099f32013-11-26 15:14:50 +0000350 break;
351
Damiend99b0522013-12-21 18:17:45 +0000352 case MP_BC_MAKE_FUNCTION:
Damienf03001f2013-11-17 13:19:33 +0000353 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200354 printf("MAKE_FUNCTION " UINT_FMT, unum);
Damienf03001f2013-11-17 13:19:33 +0000355 break;
356
Paul Sokolovsky90750022014-02-01 15:05:04 +0200357 case MP_BC_MAKE_FUNCTION_DEFARGS:
358 DECODE_UINT;
359 printf("MAKE_FUNCTION_DEFARGS " UINT_FMT, unum);
360 break;
361
Damien George6baf76e2013-12-30 22:32:17 +0000362 case MP_BC_MAKE_CLOSURE:
363 DECODE_UINT;
364 printf("MAKE_CLOSURE " UINT_FMT, unum);
365 break;
366
Damiend99b0522013-12-21 18:17:45 +0000367 case MP_BC_CALL_FUNCTION:
Damienf03001f2013-11-17 13:19:33 +0000368 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200369 printf("CALL_FUNCTION n=" UINT_FMT " nkw=" UINT_FMT, unum & 0xff, (unum >> 8) & 0xff);
Damienf03001f2013-11-17 13:19:33 +0000370 break;
371
Damiend99b0522013-12-21 18:17:45 +0000372 case MP_BC_CALL_METHOD:
Damienf03001f2013-11-17 13:19:33 +0000373 DECODE_UINT;
Paul Sokolovskye85c3892013-12-30 03:38:32 +0200374 printf("CALL_METHOD n=" UINT_FMT " nkw=" UINT_FMT, unum & 0xff, (unum >> 8) & 0xff);
Damienf03001f2013-11-17 13:19:33 +0000375 break;
376
Damiend99b0522013-12-21 18:17:45 +0000377 case MP_BC_RETURN_VALUE:
Damienf03001f2013-11-17 13:19:33 +0000378 printf("RETURN_VALUE");
379 break;
380
Paul Sokolovsky4b919d02014-01-10 04:16:50 +0200381 case MP_BC_RAISE_VARARGS:
382 unum = *ip++;
383 printf("RAISE_VARARGS " UINT_FMT, unum);
384 break;
385
Damiend99b0522013-12-21 18:17:45 +0000386 case MP_BC_YIELD_VALUE:
Damien George27bf5b82014-01-02 18:15:33 +0000387 printf("YIELD_VALUE");
388 break;
Damienf03001f2013-11-17 13:19:33 +0000389
Damien George66028ab2014-01-03 14:03:48 +0000390 case MP_BC_IMPORT_NAME:
391 DECODE_QSTR;
Damien George08d07552014-01-29 18:58:52 +0000392 printf("IMPORT_NAME %s", qstr_str(qstr));
Damien George66028ab2014-01-03 14:03:48 +0000393 break;
394
395 case MP_BC_IMPORT_FROM:
396 DECODE_QSTR;
Damien George08d07552014-01-29 18:58:52 +0000397 printf("IMPORT_FROM %s", qstr_str(qstr));
Damien George66028ab2014-01-03 14:03:48 +0000398 break;
399
Paul Sokolovskyda1ce932014-02-14 00:22:06 +0200400 case MP_BC_IMPORT_STAR:
401 printf("IMPORT_STAR");
402 break;
403
Damienf03001f2013-11-17 13:19:33 +0000404 default:
405 printf("code %p, byte code 0x%02x not implemented\n", ip, op);
406 assert(0);
407 return;
408 }
409 printf("\n");
410 }
411}
Damien Georged3ebe482014-01-07 15:20:33 +0000412
Damien Georgecbd2f742014-01-19 11:48:48 +0000413#endif // MICROPY_DEBUG_PRINTERS