diff --git a/llpython/byte_flow.py b/llpython/byte_flow.py index 2201791..c86c6d1 100644 --- a/llpython/byte_flow.py +++ b/llpython/byte_flow.py @@ -118,7 +118,7 @@ class BytecodeFlowBuilder (BasicBlockVisitor): assert arg is None return self._op(i, op, loop_i + loop_arg + 3) - #op_BUILD_CLASS = _op + op_BUILD_CLASS = _op op_BUILD_LIST = _op op_BUILD_MAP = _op op_BUILD_SLICE = _op @@ -147,7 +147,15 @@ class BytecodeFlowBuilder (BasicBlockVisitor): #op_EXTENDED_ARG = _op op_FOR_ITER = _op op_GET_ITER = _op - op_IMPORT_FROM = _op + + def op_IMPORT_FROM (self, i, op, arg): + # References top of stack without popping, so we can't use the + # generic machinery. + opname = self.opmap[op][0] + ret_val = i, op, opname, arg, [self.stack[-1]] + self.stack.append(ret_val) + return ret_val + op_IMPORT_NAME = _op op_IMPORT_STAR = _op op_INPLACE_ADD = _op diff --git a/llpython/opcode_util.py b/llpython/opcode_util.py index efd0c5c..1de6507 100644 --- a/llpython/opcode_util.py +++ b/llpython/opcode_util.py @@ -31,9 +31,9 @@ OPCODE_MAP = { 'BINARY_TRUE_DIVIDE': (2, 1, None), 'BINARY_XOR': (2, 1, None), 'BREAK_LOOP': (0, None, 1), - 'BUILD_CLASS': (None, None, None), + 'BUILD_CLASS': (3, 1, None), 'BUILD_LIST': (-1, 1, None), - 'BUILD_MAP': (None, None, None), + 'BUILD_MAP': (-1, 1, None), 'BUILD_SET': (None, None, None), 'BUILD_SLICE': (None, None, None), 'BUILD_TUPLE': (-1, 1, None), @@ -62,7 +62,7 @@ OPCODE_MAP = { 'FOR_ITER': (1, 1, 1), 'GET_ITER': (1, 1, None), 'IMPORT_FROM': (None, None, None), - 'IMPORT_NAME': (None, None, None), + 'IMPORT_NAME': (2, 1, None), 'IMPORT_STAR': (1, None, 1), 'INPLACE_ADD': (2, 1, None), 'INPLACE_AND': (2, 1, None),