summaryrefslogtreecommitdiff
path: root/py/showbc.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-02-19 23:56:23 +0000
committerDamien George <damien.p.george@gmail.com>2014-02-19 23:56:23 +0000
commitb74501c98f9abf84f659a447077989eb3ffeb46c (patch)
treea6e536dab080a1d4714187c52912890a5e62cfb3 /py/showbc.c
parent2e87c62cf62dfeb5b11022359511c31bbb35af54 (diff)
parent047cd40313e39b662650bbf6c8059ab0910e5986 (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.c17
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;