[pypy-svn] r24220 - in pypy/dist/pypy/translator/squeak: . test
nik at codespeak.net
nik at codespeak.net
Fri Mar 10 13:41:32 CET 2006
Author: nik
Date: Fri Mar 10 13:41:30 2006
New Revision: 24220
Modified:
pypy/dist/pypy/translator/squeak/gensqueak.py
pypy/dist/pypy/translator/squeak/test/test_squeaktrans.py
Log:
slightly adapt a test to use instance variables with underscores. fix
stuff to make underscores go away in squeak code. a problem remains with
possible nameclashes.
Modified: pypy/dist/pypy/translator/squeak/gensqueak.py
==============================================================================
--- pypy/dist/pypy/translator/squeak/gensqueak.py (original)
+++ pypy/dist/pypy/translator/squeak/gensqueak.py Fri Mar 10 13:41:30 2006
@@ -174,6 +174,12 @@
class_name, category,
datetime.datetime.now().strftime("%m/%d/%Y %H:%M"))
+ def unique_field(self, INSTANCE, field_name):
+ # XXX for now we ignore the issue of nameclashes between
+ # field names. It's not so simple because superclasses must
+ # be considered, too.
+ return camel_case(field_name)
+
class ClassNode(CodeNode):
def __init__(self, gen, INSTANCE):
@@ -191,8 +197,9 @@
yield "%s subclass: #%s" % (
self.gen.nameof_Instance(self.INSTANCE._superclass),
self.gen.nameof_Instance(self.INSTANCE))
- yield " instanceVariableNames: '%s'" % \
- ' '.join(self.INSTANCE._fields.iterkeys())
+ fields = [self.unique_field(self.INSTANCE, f) for f in
+ self.INSTANCE._fields.iterkeys()]
+ yield " instanceVariableNames: '%s'" % ' '.join(fields)
yield " classVariableNames: ''"
yield " poolDictionaries: ''"
yield " category: 'PyPy-Test'!"
@@ -283,30 +290,30 @@
return self.assignment(op, receiver, message, args)
def op_oogetfield(self, op):
+ INST = op.args[0].concretetype
receiver = self.expr(op.args[0])
- field_name = op.args[1].value
+ field_name = self.unique_field(INST, op.args[1].value)
if hasattr(self, "self") and op.args[0] == self.self:
# Private field access
# Could also directly substitute op.result with name
# everywhere for optimization.
- return "%s := %s." % (self.expr(op.result), field_name)
+ return "%s := %s." % (self.expr(op.result), camel_case(field_name))
else:
# Public field access
- self.gen.schedule_node(GetterNode(
- self.gen, op.args[0].concretetype, field_name))
+ self.gen.schedule_node(GetterNode(self.gen, INST, field_name))
return self.assignment(op, receiver, field_name, [])
def op_oosetfield(self, op):
# Note that the result variable is never used
- field_name = op.args[1].value
+ INST = op.args[0].concretetype
+ field_name = self.unique_field(INST, op.args[1].value)
field_value = self.expr(op.args[2])
if hasattr(self, "self") and op.args[0] == self.self:
# Private field access
return "%s := %s." % (field_name, field_value)
else:
# Public field access
- self.gen.schedule_node(SetterNode(
- self.gen, op.args[0].concretetype, field_name))
+ self.gen.schedule_node(SetterNode(self.gen, INST, field_name))
receiver = self.expr(op.args[0])
return "%s %s: %s." % (receiver, field_name, field_value)
Modified: pypy/dist/pypy/translator/squeak/test/test_squeaktrans.py
==============================================================================
--- pypy/dist/pypy/translator/squeak/test/test_squeaktrans.py (original)
+++ pypy/dist/pypy/translator/squeak/test/test_squeaktrans.py Fri Mar 10 13:41:30 2006
@@ -163,16 +163,16 @@
def test_getfield_setfield(self):
class A:
def set(self, i):
- self.i = i
+ self.i_var = i
def inc(self):
- self.i = self.i + 1
+ self.i_var = self.i_var + 1
def f(i):
a = A()
a.set(i)
- i = a.i
- a.i = 3
+ i = a.i_var
+ a.i_var = 3
a.inc()
- return i + a.i
+ return i + a.i_var
assert self.run_on_squeak(f, 2) == "6"
def dont_test_classvars(self):
More information about the Pypy-commit
mailing list