[pypy-svn] pypy default: Force saving in the __dict__ the original object whenever we do a
arigo
commits-noreply at bitbucket.org
Thu Mar 17 19:10:18 CET 2011
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r42768:eb7adda789aa
Date: 2011-03-17 14:09 -0400
http://bitbucket.org/pypy/pypy/changeset/eb7adda789aa/
Log: Force saving in the __dict__ the original object whenever we do a
Python-level assignment to a field which, like 'op', gets internally
turned into a to_simple_int().
diff --git a/pypy/interpreter/astcompiler/tools/asdl_py.py b/pypy/interpreter/astcompiler/tools/asdl_py.py
--- a/pypy/interpreter/astcompiler/tools/asdl_py.py
+++ b/pypy/interpreter/astcompiler/tools/asdl_py.py
@@ -454,6 +454,9 @@
(field.type,), 2)
self.emit("w_self.%s = obj.to_simple_int(space)" %
(field.name,), 2)
+ self.emit("# need to save the original object too", 2)
+ self.emit("w_self.setdictvalue(space, '%s', w_new_value)"
+ % (field.name,), 2)
else:
config = (field.name, field.type, repr(field.opt))
self.emit("w_self.%s = space.interp_w(%s, w_new_value, %s)" %
diff --git a/pypy/interpreter/astcompiler/ast.py b/pypy/interpreter/astcompiler/ast.py
--- a/pypy/interpreter/astcompiler/ast.py
+++ b/pypy/interpreter/astcompiler/ast.py
@@ -3590,6 +3590,8 @@
try:
obj = space.interp_w(operator, w_new_value)
w_self.op = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'op', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
@@ -4824,6 +4826,8 @@
try:
obj = space.interp_w(boolop, w_new_value)
w_self.op = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'op', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
@@ -4911,6 +4915,8 @@
try:
obj = space.interp_w(operator, w_new_value)
w_self.op = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'op', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
@@ -4980,6 +4986,8 @@
try:
obj = space.interp_w(unaryop, w_new_value)
w_self.op = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'op', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
@@ -6028,6 +6036,8 @@
try:
obj = space.interp_w(expr_context, w_new_value)
w_self.ctx = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'ctx', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
@@ -6118,6 +6128,8 @@
try:
obj = space.interp_w(expr_context, w_new_value)
w_self.ctx = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'ctx', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
@@ -6187,6 +6199,8 @@
try:
obj = space.interp_w(expr_context, w_new_value)
w_self.ctx = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'ctx', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
@@ -6252,6 +6266,8 @@
try:
obj = space.interp_w(expr_context, w_new_value)
w_self.ctx = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'ctx', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
@@ -6318,6 +6334,8 @@
try:
obj = space.interp_w(expr_context, w_new_value)
w_self.ctx = obj.to_simple_int(space)
+ # need to save the original object too
+ w_self.setdictvalue(space, 'ctx', w_new_value)
except OperationError, e:
if not e.match(space, space.w_TypeError):
raise
More information about the Pypy-commit
mailing list