summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2016-05-03 12:24:39 +0100
committerDamien George <damien.p.george@gmail.com>2016-05-03 12:24:39 +0100
commit02fd83bcbce533b4aded6e062b36d4b3a2695218 (patch)
tree4cd0cb0cd76f5b97f86287d7ff7a5f0c52b27709
parentb539a6149027aa550fa0c24cb019853a77d8a36f (diff)
downloadmicropython-02fd83bcbce533b4aded6e062b36d4b3a2695218.tar.gz
micropython-02fd83bcbce533b4aded6e062b36d4b3a2695218.zip
tools/mpy-tool: Make sure that all C-level variables are unique.
Fixes issue #2023.
-rwxr-xr-xtools/mpy-tool.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/tools/mpy-tool.py b/tools/mpy-tool.py
index ec302534a7..74106f192a 100755
--- a/tools/mpy-tool.py
+++ b/tools/mpy-tool.py
@@ -215,6 +215,9 @@ def extract_prelude(bytecode):
return ip, ip2, (n_state, n_exc_stack, scope_flags, n_pos_args, n_kwonly_args, n_def_pos_args, code_info_size)
class RawCode:
+ # a set of all escaped names, to make sure they are unique
+ escaped_names = set()
+
def __init__(self, bytecode, qstrs, objs, raw_codes):
# set core variables
self.bytecode = bytecode
@@ -240,6 +243,13 @@ class RawCode:
def freeze(self, parent_name):
self.escaped_name = parent_name + self.simple_name.qstr_esc
+ # make sure the escaped name is unique
+ i = 2
+ while self.escaped_name in RawCode.escaped_names:
+ self.escaped_name = parent_name + self.simple_name.qstr_esc + str(i)
+ i += 1
+ RawCode.escaped_names.add(self.escaped_name)
+
# emit children first
for rc in self.raw_codes:
rc.freeze(self.escaped_name + '_')