aboutsummaryrefslogtreecommitdiff
path: root/py/emit.h
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-05-22 21:43:41 +1000
committerDamien George <damien.p.george@gmail.com>2018-05-23 00:22:59 +1000
commit6211d979eed0a809cef03230e14b6d264f6f92ee (patch)
treee19aa392535d46e4d1dafef58d0afa44c86064df /py/emit.h
parenta4941a8ba49e3503f1a87f318b79b137a70b803b (diff)
py/emit: Combine load/store/delete attr into one emit function.
Reduces code size by: bare-arm: -20 minimal x86: -140 unix x64: -408 unix nanbox: -140 stm32: -68 cc3200: -16 esp8266: -80 esp32: -32
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 6467f84e8..c9e4f0c71 100644
--- a/py/emit.h
+++ b/py/emit.h
@@ -68,6 +68,11 @@ typedef enum {
#define MP_EMIT_SUBSCR_STORE (1)
#define MP_EMIT_SUBSCR_DELETE (2)
+// Kind for emit->attr()
+#define MP_EMIT_ATTR_LOAD (0)
+#define MP_EMIT_ATTR_STORE (1)
+#define MP_EMIT_ATTR_DELETE (2)
+
// Kind for emit->build()
#define MP_EMIT_BUILD_TUPLE (0)
#define MP_EMIT_BUILD_LIST (1)
@@ -105,12 +110,10 @@ typedef struct _emit_method_table_t {
void (*load_const_str)(emit_t *emit, qstr qst);
void (*load_const_obj)(emit_t *emit, mp_obj_t obj);
void (*load_null)(emit_t *emit);
- 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 (*subscr)(emit_t *emit, int kind);
- void (*store_attr)(emit_t *emit, qstr qst);
- void (*delete_attr)(emit_t *emit, qstr qst);
+ void (*attr)(emit_t *emit, qstr qst, int kind);
void (*dup_top)(emit_t *emit);
void (*dup_top_two)(emit_t *emit);
void (*pop_top)(emit_t *emit);
@@ -211,12 +214,10 @@ void mp_emit_bc_load_const_small_int(emit_t *emit, mp_int_t arg);
void mp_emit_bc_load_const_str(emit_t *emit, qstr qst);
void mp_emit_bc_load_const_obj(emit_t *emit, mp_obj_t obj);
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_subscr(emit_t *emit, int kind);
-void mp_emit_bc_store_attr(emit_t *emit, qstr qst);
-void mp_emit_bc_delete_attr(emit_t *emit, qstr qst);
+void mp_emit_bc_attr(emit_t *emit, qstr qst, int kind);
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);