diff options
author | Damien George <damien.p.george@gmail.com> | 2014-02-19 23:56:23 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-02-19 23:56:23 +0000 |
commit | b74501c98f9abf84f659a447077989eb3ffeb46c (patch) | |
tree | a6e536dab080a1d4714187c52912890a5e62cfb3 /py/showbc.c | |
parent | 2e87c62cf62dfeb5b11022359511c31bbb35af54 (diff) | |
parent | 047cd40313e39b662650bbf6c8059ab0910e5986 (diff) |
Merge pull request #312 from pfalcon/int-varlen
Support varlen encoding for arbitrary int and uint numbers
Diffstat (limited to 'py/showbc.c')
-rw-r--r-- | py/showbc.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/py/showbc.c b/py/showbc.c index e3387dbe2..837ee7611 100644 --- a/py/showbc.c +++ b/py/showbc.c @@ -57,11 +57,18 @@ void mp_byte_code_print(const byte *ip, int len) { printf("LOAD_CONST_ELLIPSIS"); break; - case MP_BC_LOAD_CONST_SMALL_INT: - unum = (ip[0] | (ip[1] << 8) | (ip[2] << 16)) - 0x800000; - ip += 3; - printf("LOAD_CONST_SMALL_INT %d", (int)unum); - break; + case MP_BC_LOAD_CONST_SMALL_INT: { + int num = 0; + if ((ip[0] & 0x40) != 0) { + // Number is negative + num--; + } + do { + num = (num << 7) | (*ip & 0x7f); + } while ((*ip++ & 0x80) != 0); + printf("LOAD_CONST_SMALL_INT %d", num); + break; + } case MP_BC_LOAD_CONST_INT: DECODE_QSTR; |