diff options
author | Damien George <damien.p.george@gmail.com> | 2019-08-22 12:39:07 +1000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2019-09-26 15:39:50 +1000 |
commit | 02db91a7a311a96dd82a497cf513137e04191b29 (patch) | |
tree | 781991a3b87530077bef6199aea8ff0ede034643 /py/showbc.c | |
parent | 870e900d02937918187a4e4ef75a1e38880bae62 (diff) |
py: Split RAISE_VARARGS opcode into 3 separate ones.
From the beginning of this project the RAISE_VARARGS opcode was named and
implemented following CPython, where it has an argument (to the opcode)
counting how many args the raise takes:
raise # 0 args (re-raise previous exception)
raise exc # 1 arg
raise exc from exc2 # 2 args (chained raise)
In the bytecode this operation therefore takes 2 bytes, one for
RAISE_VARARGS and one for the number of args.
This patch splits this opcode into 3, where each is now a single byte.
This reduces bytecode size by 1 byte for each use of raise. Every byte
counts! It also has the benefit of reducing code size (on all ports except
nanbox).
Diffstat (limited to 'py/showbc.c')
-rw-r--r-- | py/showbc.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/py/showbc.c b/py/showbc.c index 8b97c8def..78b5b0141 100644 --- a/py/showbc.c +++ b/py/showbc.c @@ -500,9 +500,16 @@ const byte *mp_bytecode_print_str(const byte *ip) { printf("RETURN_VALUE"); break; - case MP_BC_RAISE_VARARGS: - unum = *ip++; - printf("RAISE_VARARGS " UINT_FMT, unum); + case MP_BC_RAISE_LAST: + printf("RAISE_LAST"); + break; + + case MP_BC_RAISE_OBJ: + printf("RAISE_OBJ"); + break; + + case MP_BC_RAISE_FROM: + printf("RAISE_FROM"); break; case MP_BC_YIELD_VALUE: |