diff options
Diffstat (limited to 'py')
| -rw-r--r-- | py/emitglue.c | 6 | ||||
| -rw-r--r-- | py/misc.h | 2 | ||||
| -rw-r--r-- | py/mpconfig.h | 33 | ||||
| -rw-r--r-- | py/parse.c | 12 | ||||
| -rwxr-xr-x | py/py-version.sh | 3 | ||||
| -rw-r--r-- | py/scope.c | 6 | ||||
| -rw-r--r-- | py/showbc.c | 2 |
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 } @@ -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); |
