aboutsummaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/emitglue.c6
-rw-r--r--py/misc.h2
-rw-r--r--py/mpconfig.h33
-rw-r--r--py/parse.c12
-rwxr-xr-xpy/py-version.sh3
-rw-r--r--py/scope.c6
-rw-r--r--py/showbc.c2
7 files changed, 51 insertions, 13 deletions
diff --git a/py/emitglue.c b/py/emitglue.c
index 231e32ac2..ed3b385d9 100644
--- a/py/emitglue.c
+++ b/py/emitglue.c
@@ -96,9 +96,11 @@ void mp_emit_glue_assign_byte_code(mp_raw_code_t *rc, byte *code, uint len, uint
DEBUG_printf(" %02x", code[i]);
}
DEBUG_printf("\n");
-#if MICROPY_DEBUG_PRINTERS
- mp_byte_code_print(code, len);
#endif
+#if MICROPY_DEBUG_PRINTERS
+ if (mp_verbose_flag > 0) {
+ mp_byte_code_print(code, len);
+ }
#endif
}
diff --git a/py/misc.h b/py/misc.h
index 0c8161d10..5eb662409 100644
--- a/py/misc.h
+++ b/py/misc.h
@@ -156,4 +156,6 @@ void vstr_vprintf(vstr_t *vstr, const char *fmt, va_list ap);
// Debugging helpers
int DEBUG_printf(const char *fmt, ...);
+extern uint mp_verbose_flag;
+
#endif // _INCLUDED_MINILIB_H
diff --git a/py/mpconfig.h b/py/mpconfig.h
index 78147609c..435140dc7 100644
--- a/py/mpconfig.h
+++ b/py/mpconfig.h
@@ -34,6 +34,39 @@
// values below.
/*****************************************************************************/
+/* Memory allocation policy */
+
+// Initial amount for parse rule stack
+#ifndef MP_ALLOC_PARSE_RULE_INIT
+#define MP_ALLOC_PARSE_RULE_INIT (64)
+#endif
+
+// Increment for parse rule stack
+#ifndef MP_ALLOC_PARSE_RULE_INC
+#define MP_ALLOC_PARSE_RULE_INC (16)
+#endif
+
+// Initial amount for parse result stack
+#ifndef MP_ALLOC_PARSE_RESULT_INIT
+#define MP_ALLOC_PARSE_RESULT_INIT (32)
+#endif
+
+// Increment for parse result stack
+#ifndef MP_ALLOC_PARSE_RESULT_INC
+#define MP_ALLOC_PARSE_RESULT_INC (16)
+#endif
+
+// Initial amount for ids in a scope
+#ifndef MP_ALLOC_SCOPE_ID_INIT
+#define MP_ALLOC_SCOPE_ID_INIT (4)
+#endif
+
+// Increment for ids in a scope
+#ifndef MP_ALLOC_SCOPE_ID_INC
+#define MP_ALLOC_SCOPE_ID_INC (6)
+#endif
+
+/*****************************************************************************/
/* Micro Python emitters */
// Whether to emit CPython byte codes (for debugging/testing)
diff --git a/py/parse.c b/py/parse.c
index 13b137fb3..f512eea3b 100644
--- a/py/parse.c
+++ b/py/parse.c
@@ -134,13 +134,13 @@ STATIC void push_rule(parser_t *parser, int src_line, const rule_t *rule, int ar
return;
}
if (parser->rule_stack_top >= parser->rule_stack_alloc) {
- rule_stack_t *rs = m_renew_maybe(rule_stack_t, parser->rule_stack, parser->rule_stack_alloc, parser->rule_stack_alloc * 2);
+ rule_stack_t *rs = m_renew_maybe(rule_stack_t, parser->rule_stack, parser->rule_stack_alloc, parser->rule_stack_alloc + MP_ALLOC_PARSE_RULE_INC);
if (rs == NULL) {
memory_error(parser);
return;
}
parser->rule_stack = rs;
- parser->rule_stack_alloc *= 2;
+ parser->rule_stack_alloc += MP_ALLOC_PARSE_RULE_INC;
}
rule_stack_t *rs = &parser->rule_stack[parser->rule_stack_top++];
rs->src_line = src_line;
@@ -263,13 +263,13 @@ STATIC void push_result_node(parser_t *parser, mp_parse_node_t pn) {
return;
}
if (parser->result_stack_top >= parser->result_stack_alloc) {
- mp_parse_node_t *pn = m_renew_maybe(mp_parse_node_t, parser->result_stack, parser->result_stack_alloc, parser->result_stack_alloc * 2);
+ mp_parse_node_t *pn = m_renew_maybe(mp_parse_node_t, parser->result_stack, parser->result_stack_alloc, parser->result_stack_alloc + MP_ALLOC_PARSE_RESULT_INC);
if (pn == NULL) {
memory_error(parser);
return;
}
parser->result_stack = pn;
- parser->result_stack_alloc *= 2;
+ parser->result_stack_alloc += MP_ALLOC_PARSE_RESULT_INC;
}
parser->result_stack[parser->result_stack_top++] = pn;
}
@@ -350,11 +350,11 @@ mp_parse_node_t mp_parse(mp_lexer_t *lex, mp_parse_input_kind_t input_kind, mp_p
parser->had_memory_error = false;
- parser->rule_stack_alloc = 64;
+ parser->rule_stack_alloc = MP_ALLOC_PARSE_RULE_INIT;
parser->rule_stack_top = 0;
parser->rule_stack = m_new(rule_stack_t, parser->rule_stack_alloc);
- parser->result_stack_alloc = 64;
+ parser->result_stack_alloc = MP_ALLOC_PARSE_RESULT_INIT;
parser->result_stack_top = 0;
parser->result_stack = m_new(mp_parse_node_t, parser->result_stack_alloc);
diff --git a/py/py-version.sh b/py/py-version.sh
index 42474ef6a..daa25489e 100755
--- a/py/py-version.sh
+++ b/py/py-version.sh
@@ -1,6 +1,7 @@
#!/bin/bash
-git_tag="$(git describe --dirty || echo unknown)"
+# Note: git describe doesn't work if no tag is available
+git_tag="$(git describe --dirty 2> /dev/null || git rev-parse --short HEAD)"
git_hash="$(git rev-parse --short HEAD 2> /dev/null || echo unknown)"
git_files_are_clean=1
# Check if there are any modified files.
diff --git a/py/scope.c b/py/scope.c
index 8d3f7bada..ab29af78a 100644
--- a/py/scope.c
+++ b/py/scope.c
@@ -71,7 +71,7 @@ scope_t *scope_new(scope_kind_t kind, mp_parse_node_t pn, qstr source_file, uint
}
scope->raw_code = mp_emit_glue_new_raw_code();
scope->emit_options = emit_options;
- scope->id_info_alloc = 8;
+ scope->id_info_alloc = MP_ALLOC_SCOPE_ID_INIT;
scope->id_info = m_new(id_info_t, scope->id_info_alloc);
return scope;
@@ -92,8 +92,8 @@ id_info_t *scope_find_or_add_id(scope_t *scope, qstr qstr, bool *added) {
// make sure we have enough memory
if (scope->id_info_len >= scope->id_info_alloc) {
- scope->id_info = m_renew(id_info_t, scope->id_info, scope->id_info_alloc, scope->id_info_alloc * 2);
- scope->id_info_alloc *= 2;
+ scope->id_info = m_renew(id_info_t, scope->id_info, scope->id_info_alloc, scope->id_info_alloc + MP_ALLOC_SCOPE_ID_INC);
+ scope->id_info_alloc += MP_ALLOC_SCOPE_ID_INC;
}
// add new id to end of array of all ids; this seems to match CPython
diff --git a/py/showbc.c b/py/showbc.c
index ccb703f26..d8ab4be07 100644
--- a/py/showbc.c
+++ b/py/showbc.c
@@ -89,7 +89,7 @@ void mp_byte_code_print(const byte *ip, int len) {
{
qstr source_file = code_info[4] | (code_info[5] << 8) | (code_info[6] << 16) | (code_info[7] << 24);
qstr block_name = code_info[8] | (code_info[9] << 8) | (code_info[10] << 16) | (code_info[11] << 24);
- printf("File %s, block %s\n", qstr_str(source_file), qstr_str(block_name));
+ printf("File %s, block '%s'\n", qstr_str(source_file), qstr_str(block_name));
machine_int_t bc = (code_info + code_info_size) - ip;
machine_uint_t source_line = 1;
printf(" bc=" INT_FMT " line=" UINT_FMT "\n", bc, source_line);