aboutsummaryrefslogtreecommitdiff
path: root/py/emit.h
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2018-05-19 00:30:42 +1000
committerDamien George <damien.p.george@gmail.com>2018-05-23 00:22:35 +1000
commite686c940525c5b87d02e3dd7bfcdec23cfa996dd (patch)
tree53782e9b79e3a26eb4ec2c5cd1348b0cea351e25 /py/emit.h
parent0a25fff9562e3051d85db9ca773f203620004742 (diff)
py/emit: Combine yield value and yield-from emit funcs into one.
Reduces code size by: bare-arm: -24 minimal x86: -72 unix x64: -200 unix nanbox: -72 stm32: -52 cc3200: -32 esp8266: -84 esp32: -24
Diffstat (limited to 'py/emit.h')
-rw-r--r--py/emit.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/py/emit.h b/py/emit.h
index 5fe3c3d1f..c85df0a67 100644
--- a/py/emit.h
+++ b/py/emit.h
@@ -59,6 +59,10 @@ typedef enum {
#define MP_EMIT_IDOP_LOCAL_FAST (0)
#define MP_EMIT_IDOP_LOCAL_DEREF (1)
+// Kind for emit->yield()
+#define MP_EMIT_YIELD_VALUE (0)
+#define MP_EMIT_YIELD_FROM (1)
+
typedef struct _emit_t emit_t;
typedef struct _mp_emit_method_table_id_ops_t {
@@ -137,8 +141,7 @@ typedef struct _emit_method_table_t {
void (*call_method)(emit_t *emit, mp_uint_t n_positional, mp_uint_t n_keyword, mp_uint_t star_flags);
void (*return_value)(emit_t *emit);
void (*raise_varargs)(emit_t *emit, mp_uint_t n_args);
- void (*yield_value)(emit_t *emit);
- void (*yield_from)(emit_t *emit);
+ void (*yield)(emit_t *emit, int kind);
// these methods are used to control entry to/exit from an exception handler
// they may or may not emit code
@@ -252,8 +255,7 @@ void mp_emit_bc_call_function(emit_t *emit, mp_uint_t n_positional, mp_uint_t n_
void mp_emit_bc_call_method(emit_t *emit, mp_uint_t n_positional, mp_uint_t n_keyword, mp_uint_t star_flags);
void mp_emit_bc_return_value(emit_t *emit);
void mp_emit_bc_raise_varargs(emit_t *emit, mp_uint_t n_args);
-void mp_emit_bc_yield_value(emit_t *emit);
-void mp_emit_bc_yield_from(emit_t *emit);
+void mp_emit_bc_yield(emit_t *emit, int kind);
void mp_emit_bc_start_except_handler(emit_t *emit);
void mp_emit_bc_end_except_handler(emit_t *emit);