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]
Example #2
0
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]
Example #3
0
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
Example #4
0
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 == []
Example #5
0
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 == []
Example #6
0
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
Example #7
0
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() == []
Example #8
0
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
Example #9
0
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() == []
Example #11
0
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]
Example #12
0
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]