From 02fd83bcbce533b4aded6e062b36d4b3a2695218 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 3 May 2016 12:24:39 +0100 Subject: [PATCH] tools/mpy-tool: Make sure that all C-level variables are unique. Fixes issue #2023. --- tools/mpy-tool.py | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 + '_')