Author: Lars Wassermann <[email protected]>
Branch:
Changeset: r318:aa3adce87571
Date: 2013-04-22 17:18 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/aa3adce87571/
Log: fixed the test problems
diff --git a/spyvm/test/test_interpreter.py b/spyvm/test/test_interpreter.py
--- a/spyvm/test/test_interpreter.py
+++ b/spyvm/test/test_interpreter.py
@@ -271,13 +271,13 @@
step_in_interp(s_frame)
assert s_frame.pop() == w_frame
assert s_frame.stack() == []
-
+
def test_duplicateTopBytecode():
w_frame, s_frame = new_frame(pushConstantZeroBytecode +
duplicateTopBytecode)
step_in_interp(s_frame)
step_in_interp(s_frame)
assert s_frame.stack() == [space.w_zero, space.w_zero]
-
+
def test_bytecodePrimBitAnd():
w_frame, s_frame = new_frame(pushConstantOneBytecode +
pushConstantTwoBytecode + bytecodePrimBitAnd)
step_in_interp(s_frame)
@@ -285,7 +285,7 @@
step_in_interp(s_frame)
assert s_frame.pop().value == 0
assert s_frame.stack() == []
-
+
def test_bytecodePrimBitOr():
w_frame, s_frame = new_frame(pushConstantOneBytecode +
pushConstantTwoBytecode + bytecodePrimBitOr)
step_in_interp(s_frame)
@@ -301,14 +301,14 @@
step_in_interp(s_frame)
assert s_frame.pop().value == 4
assert s_frame.stack() == []
-
+
def test_bytecodePrimClass():
w_frame, s_frame = new_frame(pushConstantOneBytecode + bytecodePrimClass)
step_in_interp(s_frame)
step_in_interp(s_frame)
assert s_frame.pop() == space.w_SmallInteger
assert s_frame.stack() == []
-
+
def test_bytecodePrimSubtract():
w_frame, s_frame = new_frame(pushConstantOneBytecode +
pushConstantTwoBytecode + bytecodePrimSubtract)
step_in_interp(s_frame)
@@ -324,15 +324,15 @@
step_in_interp(s_frame)
assert s_frame.pop().value == -2
assert s_frame.stack() == []
-
+
def test_bytecodePrimDivide():
w_frame, s_frame = new_frame(pushConstantTwoBytecode +
pushConstantMinusOneBytecode + bytecodePrimDivide)
step_in_interp(s_frame)
step_in_interp(s_frame)
step_in_interp(s_frame)
- assert s_frame.pop().value == -2
+ assert s_frame.pop().value == -2
assert s_frame.stack() == []
-
+
def test_bytecodePrimDiv():
w_frame, s_frame = new_frame(pushConstantTwoBytecode +
pushConstantMinusOneBytecode + bytecodePrimDiv)
step_in_interp(s_frame)
@@ -356,14 +356,14 @@
step_in_interp(s_frame)
assert s_frame.pop() == space.w_false
assert s_frame.stack() == []
-
+
w_frame, s_frame = new_frame(pushConstantOneBytecode +
pushConstantOneBytecode + bytecodePrimEquivalent)
step_in_interp(s_frame)
step_in_interp(s_frame)
step_in_interp(s_frame)
assert s_frame.pop() == space.w_true
assert s_frame.stack() == []
-
+
def test_bytecodePrimNew():
w_fakeclassclass = mockclass(space, 10, name='fakeclassclass')
w_fakeclass = mockclass(space, 1, name='fakeclass', varsized=False,
@@ -378,7 +378,7 @@
assert s_frame.stack() == []
assert w_fakeinst.getclass(space).is_same_object(w_fakeclass)
assert w_fakeinst.size() == 1
-
+
def test_bytecodePrimNewWithArg():
w_fakeclassclass = mockclass(space, 10, name='fakeclassclass')
w_fakeclass = mockclass(space, 1, name='fakeclass', varsized=True,
@@ -394,7 +394,7 @@
assert s_frame.stack() == []
assert w_fakeinst.getclass(space).is_same_object(w_fakeclass)
assert w_fakeinst.size() == 3
-
+
def test_bytecodePrimSize():
w_fakeclass = mockclass(space, 2, name='fakeclass', varsized=True)
w_fakeinst = w_fakeclass.as_class_get_shadow(space).new(5)
@@ -412,8 +412,8 @@
# w_object - the actual object we will be sending the method to
# bytecodes - the bytecode to be executed
def sendBytecodesTest(w_class, w_object, bytecodes):
- for bytecode, result in [ (returnReceiver, w_object),
- (returnTrue, space.w_true),
+ for bytecode, result in [ (returnReceiver, w_object),
+ (returnTrue, space.w_true),
(returnFalse, space.w_false),
(returnNil, space.w_nil),
(returnTopFromMethod, space.w_one) ]:
@@ -443,7 +443,7 @@
w_class = mockclass(space, 0)
w_object = w_class.as_class_get_shadow(space).new()
sendBytecodesTest(w_class, w_object, sendLiteralSelectorBytecode(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)
@@ -475,7 +475,7 @@
assert len(s_frame.stack()) == 1
w_result = s_frame.pop()
assert space.unwrap_int(w_result) == 42
-
+
run_with_faked_primitive_methods(
[[space.w_SmallInteger, primitives.SUBTRACT,
1, "-"]],
@@ -576,7 +576,7 @@
def test_extendedStoreAndPopBytecode():
test_storeAndPopReceiverVariableBytecode(lambda index:
extendedStoreAndPopBytecode + chr((0<<6) + index))
-
+
test_storeAndPopTemporaryVariableBytecode(lambda index:
extendedStoreAndPopBytecode + chr((1<<6) + index))
py.test.raises(interpreter.IllegalStoreError,
@@ -669,7 +669,7 @@
def test_secondExtendedSendBytecode():
w_class = mockclass(space, 0)
w_object = w_class.as_class_get_shadow(space).new()
- sendBytecodesTest(w_class, w_object, secondExtendedSendBytecode + chr(0))
+ sendBytecodesTest(w_class, w_object, secondExtendedSendBytecode + chr(0))
def test_doubleExtendedDoAnythinBytecode():
w_class = mockclass(space, 0)
@@ -706,7 +706,7 @@
# value0
# " (self >> #value0) byteCode "
# " (self >> #value0) literals "
- #
+ #
# ^ [ 3 + 4 ] value
assert interpret_bc(
[ 137, 117, 200, 164, 4, 32, 33, 176, 125, 201, 124],
@@ -717,7 +717,7 @@
# value1
# " (self >> #value1) byteCode "
# " (self >> #value1) literals "
- #
+ #
# ^ [ :x | x + x + 1 ] value: 3
assert interpret_bc(
[ 137, 118, 200, 164, 7, 104, 16, 16,
@@ -728,7 +728,7 @@
# value2
# " (self >> #value2) byteCode "
# " (self >> #value2) literals "
- #
+ #
# ^ [ :x :y | x + y ] value: 3 value: 4
def test():
@@ -745,7 +745,7 @@
# value1
# " (self >> #value1) byteCode "
# " (self >> #value1) literals "
- #
+ #
# ^ [ self ] value
assert interpret_bc(
[ 137, 117, 200, 164, 2, 112, 125, 201, 124 ],
@@ -755,7 +755,7 @@
# valueReturn
# " (self >> #value1) byteCode "
# " (self >> #value1) literals "
- #
+ #
# [ ^ 1 ] value. ^ 2
assert interpret_bc(
[ 137, 117, 200, 164, 2, 118, 124, 201, 135, 119, 124 ],
@@ -765,7 +765,7 @@
# valueWithArgs
# " (self >> #value1) byteCode "
# " (self >> #value1) literals "
- #
+ #
# [ :a :b | a - b ] valueWithArguments: #(3 2)
def test():
val = interpret_bc(
@@ -789,7 +789,7 @@
run_with_faked_primitive_methods(
[[space.w_String, primitives.STRING_AT, 1, "at:"]],
test)
-
+
def test_bc_primBytecodeAtPut_string():
# ^ 'a' at: 1 put:'b'
def test():
@@ -922,7 +922,7 @@
step_in_interp(s_frame)
assert s_frame.pc() == pc + 4 + i
closure = wrapper.BlockClosureWrapper(space, s_frame.top())
- assert closure.startpc() == pc + 4
+ assert closure.startpc() == pc + 4 + 4 + 1 # pc + offset + headerword
+ smalltalk 1-indexing
assert closure.outerContext() is s_frame._w_self
def test_bc_pushClosureCopyCopied2ValuesBytecode(bytecode =
pushClosureCopyCopiedValuesBytecode):
@@ -933,7 +933,7 @@
step_in_interp(s_frame)
assert s_frame.pc() == pc + 4
closure = wrapper.BlockClosureWrapper(space, s_frame.top())
- assert closure.startpc() == pc + 4
+ assert closure.startpc() == pc + 4 + 5
assert closure.outerContext() is s_frame._w_self
assert closure.at0(0) == "english"
assert closure.at0(1) == "bar"
@@ -956,7 +956,7 @@
# ^ 1
def test():
assert interpret_bc(
- [ 0x8f, 2, 0, 4, 16, 17, 0xb0, 0x7c,
+ [ 0x8f, 2, 0, 4, 16, 17, 0xb0, 0x7c,
0x76, 0x77, 0xf0, 0x87, 0x76, 0x7c ],
fakeliterals(space, "value:value:", )).value == 3
run_with_faked_primitive_methods(
@@ -966,7 +966,7 @@
def test_stacking_interpreter():
# | testBlock |
- # testBlock := [ :aNumber |
+ # testBlock := [ :aNumber |
# aNumber = 0
# ifTrue: [ 0 ]
# ifFalse: [ (testBlock value: aNumber - 1) + aNumber ]].
@@ -974,9 +974,9 @@
import operator
interp = interpreter.Interpreter(space, max_stack_depth=3)
#create a method with the correct bytecodes and a literal
- bytes = reduce(operator.add, map(chr, [0x8a, 0x01, 0x68, 0x10, 0x8f, 0x11,
- 0x00, 0x11, 0x10, 0x75, 0xb6, 0x9a, 0x75, 0xa4, 0x09, 0x8c, 0x00,
0x01,
- 0x10, 0x76, 0xb1, 0xca, 0x10, 0xb0, 0x7d, 0x8e, 0x00, 0x00, 0x8c,
0x00,
+ bytes = reduce(operator.add, map(chr, [0x8a, 0x01, 0x68, 0x10, 0x8f, 0x11,
+ 0x00, 0x11, 0x10, 0x75, 0xb6, 0x9a, 0x75, 0xa4, 0x09, 0x8c, 0x00, 0x01,
+ 0x10, 0x76, 0xb1, 0xca, 0x10, 0xb0, 0x7d, 0x8e, 0x00, 0x00, 0x8c, 0x00,
0x00, 0x20, 0xca, 0x7c]))
w_method = model.W_CompiledMethod(len(bytes))
w_method.islarge = 1
@@ -1040,4 +1040,4 @@
except interpreter.ReturnFromTopLevel, e:
assert space.unwrap_int(e.object) == 68
except interpreter.StackOverflow, e:
- assert False
\ No newline at end of file
+ assert False
diff --git a/spyvm/test/test_model.py b/spyvm/test/test_model.py
--- a/spyvm/test/test_model.py
+++ b/spyvm/test/test_model.py
@@ -17,7 +17,7 @@
for each, length in reversed(zip(values, lengths)):
result = result << length
result += each
- return result
+ return result
def test_new():
@@ -56,7 +56,7 @@
assert w_bytes.size() == 20
assert w_class.as_class_get_shadow(space).instsize() == 0
assert w_bytes.getword(3) == 0
- w_bytes.setword(3, 42)
+ w_bytes.setword(3, 42)
assert w_bytes.getword(3) == 42
assert w_bytes.getword(0) == 0
py.test.raises(IndexError, lambda: w_bytes.getword(20))
@@ -153,7 +153,7 @@
w_o2 = w_o1
assert w_o1.is_same_object(w_o2)
assert w_o2.is_same_object(w_o1)
-
+
def test_not_is_same_object(w_o1=model.W_PointersObject(space,
None,0),w_o2=model.W_PointersObject(space, None,0)):
assert not w_o1.is_same_object(w_o2)
assert not w_o2.is_same_object(w_o1)
@@ -190,13 +190,13 @@
w_clsb = mockclass(space, 4)
w_b = w_clsb.as_class_get_shadow(space).new()
-
+
hasha = w_a.gethash()
hashb = w_b.gethash()
w_a.store(space, 0, w_b)
w_b.store(space, 1, w_a)
-
+
res = w_a.become(w_b)
assert res
assert w_a.gethash() == hashb
@@ -288,7 +288,7 @@
assert target.at0(space, i) == source.at0(space, i)
assert hex(r_uint(target.value)) == hex(r_uint(source.value))
[email protected]("socket.gethostname() == 'precise32'")
[email protected]("socket.gethostname() == 'precise32'")
def test_display_bitmap():
# XXX: Patch SDLDisplay -> get_pixelbuffer() to circumvent
# double-free bug
diff --git a/spyvm/test/test_primitives.py b/spyvm/test/test_primitives.py
--- a/spyvm/test/test_primitives.py
+++ b/spyvm/test/test_primitives.py
@@ -20,7 +20,7 @@
s_self.push_all(stack)
s_self.store_expected_argument_count(0)
self.s_class = space.w_MethodContext.as_class_get_shadow(space)
-
+
def as_blockcontext_get_shadow(self):
self._shadow = shadow.BlockContextShadow(space, self)
return self._shadow
@@ -60,7 +60,7 @@
with py.test.raises(PrimitiveFailedError):
prim_table[code](interp, w_frame.as_context_get_shadow(space),
argument_count - 1)
assert w_frame.as_context_get_shadow(space).stack() == orig_stack
-
+
# smallinteger tests
def test_small_int_add():
assert prim(primitives.ADD, [1,2]).value == 3
@@ -79,7 +79,7 @@
prim_fails(primitives.SUBTRACT, [constants.TAGGED_MININT,1])
prim_fails(primitives.SUBTRACT,
[constants.TAGGED_MININT, constants.TAGGED_MAXINT])
-
+
def test_small_int_multiply():
assert prim(primitives.MULTIPLY, [6,3]).value == 18
@@ -91,40 +91,40 @@
prim_fails(primitives.MULTIPLY, [constants.TAGGED_MAXINT, -4])
prim_fails(primitives.MULTIPLY, [constants.TAGGED_MININT,
constants.TAGGED_MAXINT])
prim_fails(primitives.MULTIPLY, [constants.TAGGED_MININT, 2])
-
+
def test_small_int_divide():
assert prim(primitives.DIVIDE, [6,3]).value == 2
-
+
def test_small_int_divide_fail():
prim_fails(primitives.DIVIDE, [12, 0])
prim_fails(primitives.DIVIDE, [12, 7])
-
+
def test_small_int_mod():
assert prim(primitives.MOD, [12,7]).value == 5
def test_small_int_mod_fail():
prim_fails(primitives.MOD, [12, 0])
-
+
def test_small_int_div():
assert prim(primitives.DIV, [12,3]).value == 4
assert prim(primitives.DIV, [12,7]).value == 1
def test_small_int_div_fail():
prim_fails(primitives.DIV, [12, 0])
-
+
def test_small_int_quo():
assert prim(primitives.QUO, [12,3]).value == 4
assert prim(primitives.QUO, [12,7]).value == 1
def test_small_int_quo_fail():
prim_fails(primitives.QUO, [12, 0])
-
+
def test_small_int_bit_and():
assert prim(primitives.BIT_AND, [2, 4]).value == 0
assert prim(primitives.BIT_AND, [2, 3]).value == 2
assert prim(primitives.BIT_AND, [3, 4]).value == 0
assert prim(primitives.BIT_AND, [4, 4]).value == 4
-
+
def test_small_int_bit_or():
assert prim(primitives.BIT_OR, [2, 4]).value == 6
assert prim(primitives.BIT_OR, [2, 3]).value == 3
@@ -145,7 +145,7 @@
assert prim(primitives.BIT_SHIFT, [0, 1]).value == 0
assert prim(primitives.BIT_SHIFT, [0, 2]).value == 0
assert prim(primitives.BIT_SHIFT, [0, 3]).value == 0
-
+
def test_small_int_bit_shift_positive():
assert prim(primitives.BIT_SHIFT, [4, -3]).value == 0
assert prim(primitives.BIT_SHIFT, [4, -2]).value == 1
@@ -155,7 +155,7 @@
assert prim(primitives.BIT_SHIFT, [4, 2]).value == 16
assert prim(primitives.BIT_SHIFT, [4, 3]).value == 32
assert prim(primitives.BIT_SHIFT, [4, 27]).value == 536870912
-
+
def test_small_int_bit_shift_negative():
assert prim(primitives.BIT_SHIFT, [-4, -3]).value == -1
assert prim(primitives.BIT_SHIFT, [-4, -2]).value == -1
@@ -165,7 +165,7 @@
assert prim(primitives.BIT_SHIFT, [-4, 2]).value == -16
assert prim(primitives.BIT_SHIFT, [-4, 3]).value == -32
assert prim(primitives.BIT_SHIFT, [-4, 27]).value == -536870912
-
+
def test_small_int_bit_shift_fail():
from rpython.rlib.rarithmetic import intmask
prim_fails(primitives.BIT_SHIFT, [4, 32])
@@ -224,7 +224,7 @@
w_obj = mockclass(space, 0, varsized=1).as_class_get_shadow(space).new(1)
assert prim(primitives.AT_PUT, [w_obj, 1, 22]).value == 22
assert prim(primitives.AT, [w_obj, 1]).value == 22
-
+
def test_at_and_at_put_bytes():
w_str = wrap("abc")
prim_fails(primitives.AT_PUT, [w_str, 1, "d"])
@@ -236,7 +236,7 @@
def test_invalid_at_put():
w_obj = mockclass(space, 0).as_class_get_shadow(space).new()
prim_fails(primitives.AT_PUT, [w_obj, 1, 22])
-
+
def test_size():
w_obj = mockclass(space, 0,
varsized=True).as_class_get_shadow(space).new(0)
assert prim(primitives.SIZE, [w_obj]).value == 0
@@ -262,11 +262,11 @@
def test_invalid_object_at():
prim_fails(primitives.OBJECT_AT, ["q", constants.CHARACTER_VALUE_INDEX+2])
-
+
def test_invalid_object_at_put():
w_obj = mockclass(space, 1).as_class_get_shadow(space).new()
prim_fails(primitives.OBJECT_AT_PUT, [w_obj, 2, 42])
-
+
def test_string_at_put():
test_str = wrap("foobar")
assert prim(primitives.STRING_AT_PUT, [test_str, 4, "c"]) == wrap("c")
@@ -278,19 +278,19 @@
w_Object = space.classtable['w_Object']
w_res = prim(primitives.NEW, [w_Object])
assert w_res.getclass(space).is_same_object(w_Object)
-
+
def test_invalid_new():
prim_fails(primitives.NEW, [space.w_String])
def test_new_with_arg():
w_res = prim(primitives.NEW_WITH_ARG, [space.w_String, 20])
assert w_res.getclass(space).is_same_object(space.w_String)
- assert w_res.size() == 20
+ assert w_res.size() == 20
def test_invalid_new_with_arg():
w_Object = space.classtable['w_Object']
prim_fails(primitives.NEW_WITH_ARG, [w_Object, 20])
-
+
def test_inst_var_at():
# n.b.: 1-based indexing!
w_v = prim(primitives.INST_VAR_AT,
@@ -314,7 +314,7 @@
# n.b.: 1-based indexing! (and an invalid index)
prim_fails(primitives.INST_VAR_AT_PUT,
["q", constants.CHARACTER_VALUE_INDEX+2, "t"])
-
+
def test_class():
assert prim(primitives.CLASS, ["string"]).is_same_object(space.w_String)
assert prim(primitives.CLASS, [1]).is_same_object(space.w_SmallInteger)
@@ -357,7 +357,7 @@
assert prim(primitives.FLOAT_GREATEROREQUAL,
[3.5,4.9]).is_same_object(space.w_false)
assert prim(primitives.FLOAT_EQUAL, [2.2,2.2]).is_same_object(space.w_true)
assert prim(primitives.FLOAT_NOTEQUAL,
[2.2,2.2]).is_same_object(space.w_false)
-
+
def test_block_copy_and_value():
# see test_interpreter for tests of these opcodes
return
@@ -406,7 +406,7 @@
assert equals_ttp(-1,2,-4)
assert equals_ttp(1.5,0,1.5)
assert equals_ttp(1.5,-1,0.75)
-
+
def test_primitive_milliseconds_clock():
import time
start = prim(primitives.MILLISECOND_CLOCK, [0]).value
@@ -472,7 +472,7 @@
def test_image_name():
w_v = prim(primitives.IMAGE_NAME, [2])
assert w_v.bytes == list(IMAGENAME)
-
+
def test_clone():
w_obj = mockclass(space, 1,
varsized=True).as_class_get_shadow(space).new(1)
w_obj.atput0(space, 0, space.wrap_int(1))
@@ -480,7 +480,7 @@
assert space.unwrap_int(w_v.at0(space, 0)) == 1
w_obj.atput0(space, 0, space.wrap_int(2))
assert space.unwrap_int(w_v.at0(space, 0)) == 1
-
+
def test_file_open_write(monkeypatch):
def open_write(filename, mode, perm):
assert filename == "nonexistant"
@@ -548,11 +548,13 @@
from test_interpreter import new_frame
w_frame, s_frame = new_frame("<never called, but used for method
generation>",
space=space)
- w_block = prim(primitives.CLOSURE_COPY_WITH_COPIED_VALUES, map(wrap,
- ["anActiveContext", 2, [wrap(1), wrap(2)]]), w_frame)
+ w_outer_frame, s_initial_context = new_frame("<never called, but used for
method generation>",
+ space=space)
+ w_block = prim(primitives.CLOSURE_COPY_WITH_COPIED_VALUES, map(wrap,
+ [w_outer_frame, 2, [wrap(1), wrap(2)]]), w_frame)
assert w_block is not space.w_nil
w_w_block = wrapper.BlockClosureWrapper(space, w_block)
- assert w_w_block.startpc() is 0
+ assert w_w_block.startpc() is 5
assert w_w_block.at0(0) == wrap(1)
assert w_w_block.at0(1) == wrap(2)
assert w_w_block.numArgs() is 2
@@ -575,9 +577,9 @@
from test_interpreter import new_frame
w_frame, s_initial_context = new_frame("<never called, but used for method
generation>",
space=space)
-
+
size_arguments = len(args)
- closure = space.newClosure(w_frame, 4, #pc
+ closure = space.newClosure(w_frame, 4, #pc
size_arguments, copiedValues)
s_initial_context.push_all([closure] + args)
interp = interpreter.Interpreter(space)
@@ -695,11 +697,11 @@
class DisplayFlush(Exception):
pass
- def flush_to_screen_mock():
+ def flush_to_screen_mock(self):
raise DisplayFlush
try:
- monkeypatch.setattr(mock_display.fetch(space, 0), "flush_to_screen",
flush_to_screen_mock)
+ monkeypatch.setattr(space.get_display().__class__, "flip",
flush_to_screen_mock)
with py.test.raises(DisplayFlush):
prim(primitives.FORCE_DISPLAY_UPDATE, [mock_display])
finally:
diff --git a/spyvm/test/test_shadow.py b/spyvm/test/test_shadow.py
--- a/spyvm/test/test_shadow.py
+++ b/spyvm/test/test_shadow.py
@@ -83,7 +83,7 @@
w_m.literalsize = 2
return w_m
-def methodcontext(w_sender=space.w_nil, pc=1, stackpointer=0, stacksize=5,
+def methodcontext(w_sender=space.w_nil, pc=13, stackpointer=0, stacksize=5,
method=method()):
w_object = model.W_PointersObject(space, space.w_MethodContext,
constants.MTHDCTX_TEMP_FRAME_START+method.tempsize+stacksize)
w_object.store(space, constants.CTXPART_SENDER_INDEX, w_sender)
@@ -97,7 +97,7 @@
w_object.store(space, constants.MTHDCTX_TEMP_FRAME_START,
space.wrap_string('el'))
return w_object
-def blockcontext(w_sender=space.w_nil, pc=1, stackpointer=1, stacksize=5,
+def blockcontext(w_sender=space.w_nil, pc=13, stackpointer=1, stacksize=5,
home=methodcontext()):
w_object = model.W_PointersObject(space, space.w_MethodContext,
constants.MTHDCTX_TEMP_FRAME_START+stacksize)
w_object.store(space, constants.CTXPART_SENDER_INDEX, w_sender)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit