See control_flow.SymbolNamer.new_symbol.
(self, name_root, reserved_locals)
| 101 | return new_name |
| 102 | |
| 103 | def new_symbol(self, name_root, reserved_locals): |
| 104 | """See control_flow.SymbolNamer.new_symbol.""" |
| 105 | # reserved_locals may contain QNs. |
| 106 | all_reserved_locals = set() |
| 107 | for s in reserved_locals: |
| 108 | if isinstance(s, qual_names.QN): |
| 109 | all_reserved_locals.update(s.qn) |
| 110 | elif isinstance(s, str): |
| 111 | all_reserved_locals.add(s) |
| 112 | else: |
| 113 | raise ValueError('Unexpected symbol type "%s"' % type(s)) |
| 114 | |
| 115 | pieces = name_root.split('_') |
| 116 | if pieces[-1].isdigit(): |
| 117 | name_root = '_'.join(pieces[:-1]) |
| 118 | n = int(pieces[-1]) |
| 119 | else: |
| 120 | n = 0 |
| 121 | new_name = name_root |
| 122 | |
| 123 | while (new_name in self.global_namespace or |
| 124 | new_name in all_reserved_locals or new_name in self.generated_names): |
| 125 | n += 1 |
| 126 | new_name = '%s_%d' % (name_root, n) |
| 127 | |
| 128 | self.generated_names.add(new_name) |
| 129 | return new_name |