From 02fd83bcbce533b4aded6e062b36d4b3a2695218 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
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 ec302534a..74106f192 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 + '_')
-- 
GitLab