Permalink
Browse files

tools/mpy-tool.py: Add support for OPT_CACHE_MAP_LOOKUP_IN_BYTECODE.

With caching of map lookups in the bytecode, frozen bytecode can still
work but must be stored in RAM, not ROM.  This patch allows mpy-tool.py to
generate code that works with this optimisation, but it's not recommended
to use it on embedded targets (because of lack of RAM).
  • Loading branch information...
1 parent 343b418 commit 98458a46ec9c34fa59dbfa7c9189b7e181e5e7a3 @dpgeorge dpgeorge committed Jan 5, 2017
Showing with 6 additions and 3 deletions.
  1. +6 −3 tools/mpy-tool.py
View
@@ -258,7 +258,10 @@ def freeze(self, parent_name):
# generate bytecode data
print()
print('// frozen bytecode for file %s, scope %s%s' % (self.source_file.str, parent_name, self.simple_name.str))
- print('STATIC const byte bytecode_data_%s[%u] = {' % (self.escaped_name, len(self.bytecode)))
+ print('STATIC ', end='')
+ if not config.MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE:
+ print('const ', end='')
+ print('byte bytecode_data_%s[%u] = {' % (self.escaped_name, len(self.bytecode)))
print(' ', end='')
for i in range(self.ip2):
print(' 0x%02x,' % self.bytecode[i], end='')
@@ -463,8 +466,8 @@ def freeze_mpy(base_qstrs, raw_codes):
print('#include "py/emitglue.h"')
print()
- print('#if MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE')
- print('#error "MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE not supported with frozen mpy files"')
+ print('#if MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE != %u' % config.MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE)
+ print('#error "incompatible MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE"')
print('#endif')
print()

0 comments on commit 98458a4

Please sign in to comment.