diff options
author | Damien George <damien.p.george@gmail.com> | 2016-02-11 22:30:53 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2016-02-25 10:05:46 +0000 |
commit | ea23520403777f9b026f49245d39f8be1ccdbdac (patch) | |
tree | 949532b08d2614af11e8616a2d902ac8ca9ad3c2 /py/lexer.c | |
parent | 57b96a7be214c8f2493db7d430348f5efcc8ad34 (diff) |
py: Add MICROPY_DYNAMIC_COMPILER option to config compiler at runtime.
This new compile-time option allows to make the bytecode compiler
configurable at runtime by setting the fields in the mp_dynamic_compiler
structure. By using this feature, the compiler can generate bytecode
that targets any MicroPython runtime/VM, regardless of the host and
target compile-time settings.
Options so far that fall under this dynamic setting are:
- maximum number of bits that a small int can hold;
- whether caching of lookups is used in the bytecode;
- whether to use unicode strings or not (lexer behaviour differs, and
therefore generated string constants differ).
Diffstat (limited to 'py/lexer.c')
-rw-r--r-- | py/lexer.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/py/lexer.c b/py/lexer.c index 89ecc386e..76abedd45 100644 --- a/py/lexer.c +++ b/py/lexer.c @@ -490,22 +490,25 @@ STATIC void mp_lexer_next_token_into(mp_lexer_t *lex, bool first_token) { } } if (c != MP_LEXER_EOF) { - #if MICROPY_PY_BUILTINS_STR_UNICODE - if (c < 0x110000 && !is_bytes) { - vstr_add_char(&lex->vstr, c); - } else if (c < 0x100 && is_bytes) { - vstr_add_byte(&lex->vstr, c); - } - #else - // without unicode everything is just added as an 8-bit byte - if (c < 0x100) { - vstr_add_byte(&lex->vstr, c); - } - #endif - else { - // unicode character out of range - // this raises a generic SyntaxError; could provide more info - lex->tok_kind = MP_TOKEN_INVALID; + if (MICROPY_PY_BUILTINS_STR_UNICODE_DYNAMIC) { + if (c < 0x110000 && !is_bytes) { + vstr_add_char(&lex->vstr, c); + } else if (c < 0x100 && is_bytes) { + vstr_add_byte(&lex->vstr, c); + } else { + // unicode character out of range + // this raises a generic SyntaxError; could provide more info + lex->tok_kind = MP_TOKEN_INVALID; + } + } else { + // without unicode everything is just added as an 8-bit byte + if (c < 0x100) { + vstr_add_byte(&lex->vstr, c); + } else { + // 8-bit character out of range + // this raises a generic SyntaxError; could provide more info + lex->tok_kind = MP_TOKEN_INVALID; + } } } } else { |