|
22 | 22 | )
|
23 | 23 | from mypyc.ir.rtypes import RInstance, exc_rtuple
|
24 | 24 | from mypyc.primitives.generic_ops import py_delattr_op
|
25 |
| -from mypyc.primitives.misc_ops import type_op |
| 25 | +from mypyc.primitives.misc_ops import type_op, import_from_op |
26 | 26 | from mypyc.primitives.exc_ops import (
|
27 | 27 | raise_exception_op, reraise_exception_op, error_catch_op, exc_matches_op, restore_exc_info_op,
|
28 | 28 | get_exc_value_op, keep_propagating_op, get_exc_info_op
|
@@ -172,18 +172,20 @@ def transform_import_from(builder: IRBuilder, node: ImportFrom) -> None:
|
172 | 172 |
|
173 | 173 | id = importlib.util.resolve_name('.' * node.relative + node.id, module_package)
|
174 | 174 |
|
175 |
| - imported = [name for name, _ in node.names] |
176 |
| - builder.gen_import_from(id, node.line, imported) |
177 |
| - module = builder.load_module(id) |
| 175 | + globals = builder.load_globals_dict() |
| 176 | + imported_names = [name for name, _ in node.names] |
| 177 | + module = builder.gen_import_from(id, globals, imported_names, node.line) |
178 | 178 |
|
179 | 179 | # Copy everything into our module's dict.
|
180 | 180 | # Note that we miscompile import from inside of functions here,
|
181 | 181 | # since that case *shouldn't* load it into the globals dict.
|
182 | 182 | # This probably doesn't matter much and the code runs basically right.
|
183 |
| - globals = builder.load_globals_dict() |
184 | 183 | for name, maybe_as_name in node.names:
|
185 | 184 | as_name = maybe_as_name or name
|
186 |
| - obj = builder.py_get_attr(module, name, node.line) |
| 185 | + obj = builder.call_c(import_from_op, |
| 186 | + [module, builder.load_str(id), |
| 187 | + builder.load_str(name), builder.load_str(as_name)], |
| 188 | + node.line) |
187 | 189 | builder.gen_method_call(
|
188 | 190 | globals, '__setitem__', [builder.load_str(as_name), obj],
|
189 | 191 | result_type=None, line=node.line)
|
|
0 commit comments