summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--py/compile.c6
-rw-r--r--py/emit.h7
-rw-r--r--py/emitbc.c27
-rw-r--r--py/emitcpy.c118
-rw-r--r--py/emitnative.c30
-rw-r--r--py/emitpass1.c5
6 files changed, 44 insertions, 149 deletions
diff --git a/py/compile.c b/py/compile.c
index 5fbf623b29..ea0bbc2d55 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -383,9 +383,7 @@ static void cpython_c_tuple(compiler_t *comp, py_parse_node_t pn, py_parse_node_
} else {
vstr_printf(vstr, ")");
}
- EMIT(load_const_verbatim_start);
EMIT(load_const_verbatim_str, vstr_str(vstr));
- EMIT(load_const_verbatim_end);
vstr_free(vstr);
} else {
if (!PY_PARSE_NODE_IS_NULL(pn)) {
@@ -1221,9 +1219,7 @@ void compile_import_from(compiler_t *comp, py_parse_node_struct_t *pns) {
// build the "fromlist" tuple
#if MICROPY_EMIT_CPYTHON
- EMIT(load_const_verbatim_start);
EMIT(load_const_verbatim_str, "('*',)");
- EMIT(load_const_verbatim_end);
#else
EMIT(load_const_str, qstr_from_str_static("*"), false);
EMIT(build_tuple, 1);
@@ -1259,9 +1255,7 @@ void compile_import_from(compiler_t *comp, py_parse_node_struct_t *pns) {
vstr_printf(vstr, ",");
}
vstr_printf(vstr, ")");
- EMIT(load_const_verbatim_start);
EMIT(load_const_verbatim_str, vstr_str(vstr));
- EMIT(load_const_verbatim_end);
vstr_free(vstr);
}
#else
diff --git a/py/emit.h b/py/emit.h
index fdfe76437b..62a149e10c 100644
--- a/py/emit.h
+++ b/py/emit.h
@@ -38,12 +38,7 @@ typedef struct _emit_method_table_t {
void (*load_const_dec)(emit_t *emit, qstr qstr);
void (*load_const_id)(emit_t *emit, qstr qstr);
void (*load_const_str)(emit_t *emit, qstr qstr, bool bytes);
- void (*load_const_verbatim_start)(emit_t *emit);
- void (*load_const_verbatim_int)(emit_t *emit, int val);
- void (*load_const_verbatim_str)(emit_t *emit, const char *str);
- void (*load_const_verbatim_strn)(emit_t *emit, const char *str, int len);
- void (*load_const_verbatim_quoted_str)(emit_t *emit, qstr qstr, bool bytes);
- void (*load_const_verbatim_end)(emit_t *emit);
+ void (*load_const_verbatim_str)(emit_t *emit, const char *str); // only needed for emitcpy
void (*load_fast)(emit_t *emit, qstr qstr, int local_num);
void (*load_deref)(emit_t *emit, qstr qstr, int local_num);
void (*load_closure)(emit_t *emit, qstr qstr, int local_num);
diff --git a/py/emitbc.c b/py/emitbc.c
index 880c10807e..e1632f37f2 100644
--- a/py/emitbc.c
+++ b/py/emitbc.c
@@ -266,28 +266,8 @@ static void emit_bc_load_const_str(emit_t *emit, qstr qstr, bool bytes) {
}
}
-static void emit_bc_load_const_verbatim_start(emit_t *emit) {
- emit_pre(emit, 1);
- assert(0);
-}
-
-static void emit_bc_load_const_verbatim_int(emit_t *emit, int val) {
- assert(0);
-}
-
static void emit_bc_load_const_verbatim_str(emit_t *emit, const char *str) {
- assert(0);
-}
-
-static void emit_bc_load_const_verbatim_strn(emit_t *emit, const char *str, int len) {
- assert(0);
-}
-
-static void emit_bc_load_const_verbatim_quoted_str(emit_t *emit, qstr qstr, bool bytes) {
- assert(0);
-}
-
-static void emit_bc_load_const_verbatim_end(emit_t *emit) {
+ // not needed/supported for BC
assert(0);
}
@@ -718,12 +698,7 @@ const emit_method_table_t emit_bc_method_table = {
emit_bc_load_const_dec,
emit_bc_load_const_id,
emit_bc_load_const_str,
- emit_bc_load_const_verbatim_start,
- emit_bc_load_const_verbatim_int,
emit_bc_load_const_verbatim_str,
- emit_bc_load_const_verbatim_strn,
- emit_bc_load_const_verbatim_quoted_str,
- emit_bc_load_const_verbatim_end,
emit_bc_load_fast,
emit_bc_load_deref,
emit_bc_load_closure,
diff --git a/py/emitcpy.c b/py/emitcpy.c
index a1d03ec4c1..cb8bef4794 100644
--- a/py/emitcpy.c
+++ b/py/emitcpy.c
@@ -28,9 +28,6 @@ struct _emit_t {
int *label_offsets;
};
-// forward declaration
-static void emit_cpy_load_const_verbatim_quoted_str(emit_t *emit, qstr qstr, bool bytes);
-
emit_t *emit_cpython_new(uint max_num_labels) {
emit_t *emit = m_new(emit_t, 1);
emit->max_num_labels = max_num_labels;
@@ -176,85 +173,59 @@ static void emit_cpy_load_const_id(emit_t *emit, qstr qstr) {
}
}
-static void emit_cpy_load_const_str(emit_t *emit, qstr qstr, bool bytes) {
- emit_pre(emit, 1, 3);
- if (emit->pass == PASS_3) {
- printf("LOAD_CONST ");
- emit_cpy_load_const_verbatim_quoted_str(emit, qstr, bytes);
- printf("\n");
+static void print_quoted_str(qstr qstr, bool bytes) {
+ const char *str = qstr_str(qstr);
+ int len = strlen(str);
+ bool has_single_quote = false;
+ bool has_double_quote = false;
+ for (int i = 0; i < len; i++) {
+ if (str[i] == '\'') {
+ has_single_quote = true;
+ } else if (str[i] == '"') {
+ has_double_quote = true;
+ }
+ }
+ if (bytes) {
+ printf("b");
+ }
+ bool quote_single = false;
+ if (has_single_quote && !has_double_quote) {
+ printf("\"");
+ } else {
+ quote_single = true;
+ printf("'");
+ }
+ for (int i = 0; i < len; i++) {
+ if (str[i] == '\n') {
+ printf("\\n");
+ } else if (str[i] == '\\') {
+ printf("\\\\");
+ } else if (str[i] == '\'' && quote_single) {
+ printf("\\'");
+ } else {
+ printf("%c", str[i]);
+ }
+ }
+ if (has_single_quote && !has_double_quote) {
+ printf("\"");
+ } else {
+ printf("'");
}
}
-static void emit_cpy_load_const_verbatim_start(emit_t *emit) {
+static void emit_cpy_load_const_str(emit_t *emit, qstr qstr, bool bytes) {
emit_pre(emit, 1, 3);
if (emit->pass == PASS_3) {
printf("LOAD_CONST ");
- }
-}
-
-static void emit_cpy_load_const_verbatim_int(emit_t *emit, int val) {
- if (emit->pass == PASS_3) {
- printf("%d", val);
+ print_quoted_str(qstr, bytes);
+ printf("\n");
}
}
static void emit_cpy_load_const_verbatim_str(emit_t *emit, const char *str) {
+ emit_pre(emit, 1, 3);
if (emit->pass == PASS_3) {
- printf("%s", str);
- }
-}
-
-static void emit_cpy_load_const_verbatim_strn(emit_t *emit, const char *str, int len) {
- if (emit->pass == PASS_3) {
- printf("%.*s", len, str);
- }
-}
-
-static void emit_cpy_load_const_verbatim_quoted_str(emit_t *emit, qstr qstr, bool bytes) {
- if (emit->pass == PASS_3) {
- const char *str = qstr_str(qstr);
- int len = strlen(str);
- bool has_single_quote = false;
- bool has_double_quote = false;
- for (int i = 0; i < len; i++) {
- if (str[i] == '\'') {
- has_single_quote = true;
- } else if (str[i] == '"') {
- has_double_quote = true;
- }
- }
- if (bytes) {
- printf("b");
- }
- bool quote_single = false;
- if (has_single_quote && !has_double_quote) {
- printf("\"");
- } else {
- quote_single = true;
- printf("'");
- }
- for (int i = 0; i < len; i++) {
- if (str[i] == '\n') {
- printf("\\n");
- } else if (str[i] == '\\') {
- printf("\\\\");
- } else if (str[i] == '\'' && quote_single) {
- printf("\\'");
- } else {
- printf("%c", str[i]);
- }
- }
- if (has_single_quote && !has_double_quote) {
- printf("\"");
- } else {
- printf("'");
- }
- }
-}
-
-static void emit_cpy_load_const_verbatim_end(emit_t *emit) {
- if (emit->pass == PASS_3) {
- printf("\n");
+ printf("LOAD_CONST %s\n", str);
}
}
@@ -845,12 +816,7 @@ const emit_method_table_t emit_cpython_method_table = {
emit_cpy_load_const_dec,
emit_cpy_load_const_id,
emit_cpy_load_const_str,
- emit_cpy_load_const_verbatim_start,
- emit_cpy_load_const_verbatim_int,
emit_cpy_load_const_verbatim_str,
- emit_cpy_load_const_verbatim_strn,
- emit_cpy_load_const_verbatim_quoted_str,
- emit_cpy_load_const_verbatim_end,
emit_cpy_load_fast,
emit_cpy_load_deref,
emit_cpy_load_closure,
diff --git a/py/emitnative.c b/py/emitnative.c
index 29acee9e83..17d217c973 100644
--- a/py/emitnative.c
+++ b/py/emitnative.c
@@ -629,36 +629,11 @@ static void emit_native_load_const_str(emit_t *emit, qstr qstr, bool bytes) {
}
}
-static void emit_native_load_const_verbatim_start(emit_t *emit) {
- // not supported/needed for viper
- assert(0);
-}
-
-static void emit_native_load_const_verbatim_int(emit_t *emit, int val) {
- // not supported/needed for viper
- assert(0);
-}
-
static void emit_native_load_const_verbatim_str(emit_t *emit, const char *str) {
// not supported/needed for viper
assert(0);
}
-static void emit_native_load_const_verbatim_strn(emit_t *emit, const char *str, int len) {
- // not supported/needed for viper
- assert(0);
-}
-
-static void emit_native_load_const_verbatim_quoted_str(emit_t *emit, qstr qstr, bool bytes) {
- // not supported/needed for viper
- assert(0);
-}
-
-static void emit_native_load_const_verbatim_end(emit_t *emit) {
- // not supported/needed for viper
- assert(0);
-}
-
static void emit_native_load_fast(emit_t *emit, qstr qstr, int local_num) {
vtype_kind_t vtype = emit->local_vtype[local_num];
if (vtype == VTYPE_UNBOUND) {
@@ -1273,12 +1248,7 @@ const emit_method_table_t EXPORT_FUN(method_table) = {
emit_native_load_const_dec,
emit_native_load_const_id,
emit_native_load_const_str,
- emit_native_load_const_verbatim_start,
- emit_native_load_const_verbatim_int,
emit_native_load_const_verbatim_str,
- emit_native_load_const_verbatim_strn,
- emit_native_load_const_verbatim_quoted_str,
- emit_native_load_const_verbatim_end,
emit_native_load_fast,
emit_native_load_deref,
emit_native_load_closure,
diff --git a/py/emitpass1.c b/py/emitpass1.c
index f14ccc5111..5526c2d5d8 100644
--- a/py/emitpass1.c
+++ b/py/emitpass1.c
@@ -188,9 +188,4 @@ const emit_method_table_t emit_pass1_method_table = {
(void*)emit_pass1_dummy,
(void*)emit_pass1_dummy,
(void*)emit_pass1_dummy,
- (void*)emit_pass1_dummy,
- (void*)emit_pass1_dummy,
- (void*)emit_pass1_dummy,
- (void*)emit_pass1_dummy,
- (void*)emit_pass1_dummy,
};