aboutsummaryrefslogtreecommitdiff
path: root/py/emit.h
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-05-22 21:31:56 +1000
committerDamien George <damien.p.george@gmail.com>2018-05-23 00:22:55 +1000
commita4941a8ba49e3503f1a87f318b79b137a70b803b (patch)
treec154376ee020eb2c5c95db1687a0c0cbaad86f87 /py/emit.h
parentd298013939b38fb05961cf05c03ac3aef6a4f00c (diff)
py/emit: Combine load/store/delete subscr into one emit function.
Reduces code size by: bare-arm: -8 minimal x86: -104 unix x64: -312 unix nanbox: -120 stm32: -60 cc3200: -16 esp8266: -92 esp32: -24
Diffstat (limited to 'py/emit.h')
-rw-r--r--py/emit.h13
1 files changed, 7 insertions, 6 deletions
diff --git a/py/emit.h b/py/emit.h
index 3574d00e3..6467f84e8 100644
--- a/py/emit.h
+++ b/py/emit.h
@@ -63,6 +63,11 @@ typedef enum {
#define MP_EMIT_IDOP_GLOBAL_NAME (0)
#define MP_EMIT_IDOP_GLOBAL_GLOBAL (1)
+// Kind for emit->subscr()
+#define MP_EMIT_SUBSCR_LOAD (0)
+#define MP_EMIT_SUBSCR_STORE (1)
+#define MP_EMIT_SUBSCR_DELETE (2)
+
// Kind for emit->build()
#define MP_EMIT_BUILD_TUPLE (0)
#define MP_EMIT_BUILD_LIST (1)
@@ -103,11 +108,9 @@ typedef struct _emit_method_table_t {
void (*load_attr)(emit_t *emit, qstr qst);
void (*load_method)(emit_t *emit, qstr qst, bool is_super);
void (*load_build_class)(emit_t *emit);
- void (*load_subscr)(emit_t *emit);
+ void (*subscr)(emit_t *emit, int kind);
void (*store_attr)(emit_t *emit, qstr qst);
- void (*store_subscr)(emit_t *emit);
void (*delete_attr)(emit_t *emit, qstr qst);
- void (*delete_subscr)(emit_t *emit);
void (*dup_top)(emit_t *emit);
void (*dup_top_two)(emit_t *emit);
void (*pop_top)(emit_t *emit);
@@ -211,11 +214,9 @@ void mp_emit_bc_load_null(emit_t *emit);
void mp_emit_bc_load_attr(emit_t *emit, qstr qst);
void mp_emit_bc_load_method(emit_t *emit, qstr qst, bool is_super);
void mp_emit_bc_load_build_class(emit_t *emit);
-void mp_emit_bc_load_subscr(emit_t *emit);
+void mp_emit_bc_subscr(emit_t *emit, int kind);
void mp_emit_bc_store_attr(emit_t *emit, qstr qst);
-void mp_emit_bc_store_subscr(emit_t *emit);
void mp_emit_bc_delete_attr(emit_t *emit, qstr qst);
-void mp_emit_bc_delete_subscr(emit_t *emit);
void mp_emit_bc_dup_top(emit_t *emit);
void mp_emit_bc_dup_top_two(emit_t *emit);
void mp_emit_bc_pop_top(emit_t *emit);