| 121 | self._define_ref(name, load=(VAR_LOAD_RESOLVE, name)) |
| 122 | |
| 123 | def branch_update(self, branch_symbols: t.Sequence["Symbols"]) -> None: |
| 124 | stores: t.Set[str] = set() |
| 125 | |
| 126 | for branch in branch_symbols: |
| 127 | stores.update(branch.stores) |
| 128 | |
| 129 | stores.difference_update(self.stores) |
| 130 | |
| 131 | for sym in branch_symbols: |
| 132 | self.refs.update(sym.refs) |
| 133 | self.loads.update(sym.loads) |
| 134 | self.stores.update(sym.stores) |
| 135 | |
| 136 | for name in stores: |
| 137 | target = self.find_ref(name) |
| 138 | assert target is not None, "should not happen" |
| 139 | |
| 140 | if self.parent is not None: |
| 141 | outer_target = self.parent.find_ref(name) |
| 142 | if outer_target is not None: |
| 143 | self.loads[target] = (VAR_LOAD_ALIAS, outer_target) |
| 144 | continue |
| 145 | self.loads[target] = (VAR_LOAD_RESOLVE, name) |
| 146 | |
| 147 | def dump_stores(self) -> t.Dict[str, str]: |
| 148 | rv: t.Dict[str, str] = {} |