def sendBytecodesTest(w_class, w_object, bytecodes): for bytecode, result in [ (returnReceiver, w_object), (returnTrue, space.w_true), (returnFalse, space.w_false), (returnNil, space.w_nil), (returnTopFromMethod, space.w_one), ]: shadow = w_class.as_class_get_shadow(space) w_method = model.W_CompiledMethod(2) w_method.bytes = pushConstantOneBytecode + bytecode shadow.installmethod("foo", w_method) interp = new_interpreter(bytecodes) interp.w_active_context().as_methodcontext_get_shadow(space).w_method().literals = fakeliterals(space, "foo") interp.s_active_context().push(w_object) callerContext = interp.w_active_context() interp.step() assert interp.s_active_context().w_sender() == callerContext assert interp.s_active_context().stack() == [] assert interp.w_active_context().as_methodcontext_get_shadow(space).w_receiver().is_same_object(w_object) assert ( interp.w_active_context() .as_methodcontext_get_shadow(space) .w_method() .is_same_object(shadow.s_methoddict().methoddict["foo"]) ) assert callerContext.as_context_get_shadow(space).stack() == [] interp.step() interp.step() assert interp.w_active_context() == callerContext assert interp.s_active_context().stack() == [result]
def sendBytecodesTest(w_class, w_object, bytecodes): for bytecode, result in [(returnReceiver, w_object), (returnTrue, interpreter.Interpreter.TRUE), (returnFalse, interpreter.Interpreter.FALSE), (returnNil, interpreter.Interpreter.NIL), (returnTopFromMethod, interpreter.Interpreter.ONE) ]: shadow = w_class.as_class_get_shadow() w_method = model.W_CompiledMethod(2) w_method.bytes = pushConstantOneBytecode + bytecode shadow.installmethod("foo", w_method) interp = new_interpreter(bytecodes) interp.w_active_context.w_method().literals = fakeliterals("foo") interp.w_active_context.push(w_object) callerContext = interp.w_active_context interp.step() assert interp.w_active_context.w_sender == callerContext assert interp.w_active_context.stack == [] assert interp.w_active_context.w_receiver == w_object assert interp.w_active_context.w_method() == shadow.methoddict["foo"] assert callerContext.stack == [] interp.step() interp.step() assert interp.w_active_context == callerContext assert interp.w_active_context.stack == [result]
def build(): bytecode = ''.join(map(chr, [ 16, 119, 178, 154, 118, 164, 11, 112, 16, 118, 177, 224, 112, 16, 119, 177, 224, 176, 124 ])) shadow = mockclass(0).as_class_get_shadow() method = model.W_CompiledMethod(1, bytecode, 1) method.literals = fakeliterals("fib:") shadow.installmethod("fib:", method) w_object = shadow.new() interp = new_interpreter(sendLiteralSelectorBytecode(16) + returnTopFromMethod) interp.w_active_context.w_method().literals = fakeliterals("fib:") return interp, w_object
def test_callPrimitiveAndPush_fallback(): interp = new_interpreter(bytecodePrimAdd) shadow = mockclass(0).as_class_get_shadow() w_method = model.W_CompiledMethod(0) w_method.argsize = 1 w_method.literalsize = 1 shadow.installmethod("+", w_method) w_object = shadow.new() interp.w_active_context.push(w_object) interp.w_active_context.push(interp.ONE) interp.step() assert interp.w_active_context.w_method() == shadow.methoddict["+"] assert interp.w_active_context.w_receiver is w_object assert interp.w_active_context.gettemp(0) == interp.ONE assert interp.w_active_context.stack == []
def test_fibWithArgument(): bytecode = ''.join(map(chr, [ 16, 119, 178, 154, 118, 164, 11, 112, 16, 118, 177, 224, 112, 16, 119, 177, 224, 176, 124 ])) shadow = mockclass(0).as_class_get_shadow() method = model.W_CompiledMethod(len(bytecode)) method.literalsize = 1 method.bytes = bytecode method.argsize = 1 method.literals = fakeliterals("fib:") shadow.installmethod("fib:", method) w_object = shadow.new() interp = new_interpreter(sendLiteralSelectorBytecode(16) + returnTopFromMethod) interp.w_active_context.w_method().literals = fakeliterals("fib:") interp.w_active_context.push(w_object) interp.w_active_context.push(wrap_int(8)) result = interp.interpret() assert unwrap_int(result) == 34
def test_callPrimitiveAndPush_fallback(): interp = new_interpreter(bytecodePrimAdd) shadow = mockclass(space, 0).as_class_get_shadow(space) w_method = model.W_CompiledMethod(0) w_method.argsize = 1 w_method.tempsize = 1 w_method.literalsize = 1 shadow.installmethod("+", w_method) w_object = shadow.new() interp.s_active_context().push(w_object) interp.s_active_context().push(space.w_one) interp.step() assert interp.w_active_context().as_methodcontext_get_shadow(space).w_method() == shadow.s_methoddict().methoddict["+"] assert interp.s_active_context().w_receiver() is w_object assert interp.w_active_context().as_methodcontext_get_shadow(space).gettemp(0).is_same_object(space.w_one) assert interp.s_active_context().stack() == []
def test_fibWithArgument(): bytecode = ''.join(map(chr, [ 16, 119, 178, 154, 118, 164, 11, 112, 16, 118, 177, 224, 112, 16, 119, 177, 224, 176, 124 ])) shadow = mockclass(space, 0).as_class_get_shadow(space) method = model.W_CompiledMethod(len(bytecode)) method.literalsize = 1 method.bytes = bytecode method.argsize = 1 method.tempsize = 1 method.literals = fakeliterals(space, "fib:") shadow.installmethod("fib:", method) w_object = shadow.new() interp = new_interpreter(sendLiteralSelectorBytecode(16) + returnTopFromMethod) interp.w_active_context().as_methodcontext_get_shadow(space).w_method().literals = fakeliterals(space, "fib:") interp.s_active_context().push(w_object) interp.s_active_context().push(space.wrap_int(8)) result = interp.interpret() assert space.unwrap_int(result) == 34
def test_method_lookup(): w_class = mockclass(space, 0) shadow = w_class.as_class_get_shadow(space) shadow.installmethod("foo", 1) shadow.installmethod("bar", 2) w_subclass = mockclass(space, 0, w_superclass=w_class) subshadow = w_subclass.as_class_get_shadow(space) assert subshadow.s_superclass() is shadow subshadow.installmethod("foo", 3) shadow.initialize_methoddict() subshadow.initialize_methoddict() assert shadow.lookup("foo") == 1 assert shadow.lookup("bar") == 2 py.test.raises(MethodNotFound, shadow.lookup, "zork") assert subshadow.lookup("foo") == 3 assert subshadow.lookup("bar") == 2 py.test.raises(MethodNotFound, subshadow.lookup, "zork")
def test_callPrimitiveAndPush_fallback(): interp = new_interpreter(bytecodePrimAdd) shadow = mockclass(space, 0).as_class_get_shadow(space) w_method = model.W_CompiledMethod(0) w_method.argsize = 1 w_method.tempsize = 1 w_method.literalsize = 1 shadow.installmethod("+", w_method) w_object = shadow.new() interp.s_active_context().push(w_object) interp.s_active_context().push(space.w_one) interp.step() assert ( interp.w_active_context().as_methodcontext_get_shadow(space).w_method() == shadow.s_methoddict().methoddict["+"] ) assert interp.s_active_context().w_receiver() is w_object assert interp.w_active_context().as_methodcontext_get_shadow(space).gettemp(0).is_same_object(space.w_one) assert interp.s_active_context().stack() == []
def sendBytecodesTest(w_class, w_object, bytecodes): for bytecode, result in [ (returnReceiver, w_object), (returnTrue, space.w_true), (returnFalse, space.w_false), (returnNil, space.w_nil), (returnTopFromMethod, space.w_one) ]: shadow = w_class.as_class_get_shadow(space) w_method = model.W_CompiledMethod(2) w_method.bytes = pushConstantOneBytecode + bytecode shadow.installmethod("foo", w_method) interp = new_interpreter(bytecodes) interp.w_active_context().as_methodcontext_get_shadow(space).w_method().literals = fakeliterals(space, "foo") interp.s_active_context().push(w_object) callerContext = interp.w_active_context() interp.step() assert interp.s_active_context().w_sender() == callerContext assert interp.s_active_context().stack() == [] assert interp.w_active_context().as_methodcontext_get_shadow(space).w_receiver().is_same_object(w_object) assert interp.w_active_context().as_methodcontext_get_shadow(space).w_method().is_same_object(shadow.s_methoddict().methoddict["foo"]) assert callerContext.as_context_get_shadow(space).stack() == [] interp.step() interp.step() assert interp.w_active_context() == callerContext assert interp.s_active_context().stack() == [result]
def sendBytecodesTest(w_class, w_object, bytecodes): for bytecode, result in [ (returnReceiver, w_object), (returnTrue, interpreter.Interpreter.TRUE), (returnFalse, interpreter.Interpreter.FALSE), (returnNil, interpreter.Interpreter.NIL), (returnTopFromMethod, interpreter.Interpreter.ONE) ]: shadow = w_class.as_class_get_shadow() w_method = model.W_CompiledMethod(2) w_method.bytes = pushConstantOneBytecode + bytecode shadow.installmethod("foo", w_method) interp = new_interpreter(bytecodes) interp.w_active_context.w_method().literals = fakeliterals("foo") interp.w_active_context.push(w_object) callerContext = interp.w_active_context interp.step() assert interp.w_active_context.w_sender == callerContext assert interp.w_active_context.stack == [] assert interp.w_active_context.w_receiver == w_object assert interp.w_active_context.w_method() == shadow.methoddict["foo"] assert callerContext.stack == [] interp.step() interp.step() assert interp.w_active_context == callerContext assert interp.w_active_context.stack == [result]