Skip to content

Commit 02fd83b

Browse files
committed
tools/mpy-tool: Make sure that all C-level variables are unique.
Fixes issue adafruit#2023.
1 parent b539a61 commit 02fd83b

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

tools/mpy-tool.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ def extract_prelude(bytecode):
215215
return ip, ip2, (n_state, n_exc_stack, scope_flags, n_pos_args, n_kwonly_args, n_def_pos_args, code_info_size)
216216

217217
class RawCode:
218+
# a set of all escaped names, to make sure they are unique
219+
escaped_names = set()
220+
218221
def __init__(self, bytecode, qstrs, objs, raw_codes):
219222
# set core variables
220223
self.bytecode = bytecode
@@ -240,6 +243,13 @@ def dump(self):
240243
def freeze(self, parent_name):
241244
self.escaped_name = parent_name + self.simple_name.qstr_esc
242245

246+
# make sure the escaped name is unique
247+
i = 2
248+
while self.escaped_name in RawCode.escaped_names:
249+
self.escaped_name = parent_name + self.simple_name.qstr_esc + str(i)
250+
i += 1
251+
RawCode.escaped_names.add(self.escaped_name)
252+
243253
# emit children first
244254
for rc in self.raw_codes:
245255
rc.freeze(self.escaped_name + '_')

0 commit comments

Comments
 (0)