[pypy-svn] r52628 - in pypy/dist/pypy/translator/cli: . test
antocuni at codespeak.net
antocuni at codespeak.net
Mon Mar 17 09:56:30 CET 2008
Author: antocuni
Date: Mon Mar 17 09:56:28 2008
New Revision: 52628
Modified:
pypy/dist/pypy/translator/cli/constant.py
pypy/dist/pypy/translator/cli/dotnet.py
pypy/dist/pypy/translator/cli/test/test_dotnet.py
Log:
now it should really be possible to mix all record instances with
System.Object instances
Modified: pypy/dist/pypy/translator/cli/constant.py
==============================================================================
--- pypy/dist/pypy/translator/cli/constant.py (original)
+++ pypy/dist/pypy/translator/cli/constant.py Mon Mar 17 09:56:28 2008
@@ -83,20 +83,20 @@
def downcast_constant(self, gen, const, EXPECTED_TYPE):
type = self.cts.lltype_to_cts(EXPECTED_TYPE)
gen.ilasm.opcode('castclass', type)
-
+
def _get_key_for_const(self, value):
- from pypy.translator.cli.dotnet import _record_view
- if isinstance(value, _record_view):
- return value._record
+ if isinstance(value, ootype._view) and isinstance(value._inst, ootype._record):
+ return value._inst
return BaseConstantGenerator._get_key_for_const(self, value)
def _create_complex_const(self, value):
- from pypy.translator.cli.dotnet import _fieldinfo, _record_view
+ from pypy.translator.cli.dotnet import _fieldinfo
+
if isinstance(value, _fieldinfo):
uniq = self.db.unique()
return CLIFieldInfoConst(self.db, value.llvalue, uniq)
- elif isinstance(value, _record_view):
- return self.record_const(value._record)
+ elif isinstance(value, ootype._view) and isinstance(value._inst, ootype._record):
+ return self.record_const(value._inst)
else:
return BaseConstantGenerator._create_complex_const(self, value)
Modified: pypy/dist/pypy/translator/cli/dotnet.py
==============================================================================
--- pypy/dist/pypy/translator/cli/dotnet.py (original)
+++ pypy/dist/pypy/translator/cli/dotnet.py Mon Mar 17 09:56:28 2008
@@ -633,37 +633,16 @@
v_inst = hop.inputarg(hop.args_r[0], arg=0)
return hop.genop('oodowncast', [v_inst], resulttype = hop.r_result.lowleveltype)
-class _record_view(object):
-
- def __init__(self, record):
- self._record = record
- self._TYPE = CLR.System.Object._INSTANCE
-
- def __ne__(self, other):
- return not (self == other)
-
- def __eq__(self, other):
- if isinstance(other, ootype._record):
- return self._record == other
- assert isinstance(other, _record_view)
- return self._record == other._record
-
- def __hash__(self):
- return hash(self._record)
-
- def __nonzero__(self):
- return bool(self._record)
-
-
def cast_record_to_object(record):
T = ootype.typeOf(record)
assert isinstance(T, ootype.Record)
- return _record_view(record)
+ return ootype._view(CLR.System.Object._INSTANCE, record)
def cast_object_to_record(T, obj):
assert isinstance(T, ootype.Record)
- assert isinstance(obj, _record_view)
- record = obj._record
+ assert isinstance(obj, ootype._view)
+ assert isinstance(obj._inst, ootype._record)
+ record = obj._inst
assert ootype.typeOf(record) == T
return record
Modified: pypy/dist/pypy/translator/cli/test/test_dotnet.py
==============================================================================
--- pypy/dist/pypy/translator/cli/test/test_dotnet.py (original)
+++ pypy/dist/pypy/translator/cli/test/test_dotnet.py Mon Mar 17 09:56:28 2008
@@ -641,7 +641,7 @@
res = self.interpret(fn, [True])
assert res == 'Int32'
- def test_mix_record_and_object(self):
+ def test_cast_record(self):
T = ootype.Record({'x': ootype.Signed})
record = ootype.new(T)
def fn(flag):
@@ -665,6 +665,14 @@
res = self.interpret(fn, [])
assert res
+ def test_cast_record_mix_object(self):
+ T = ootype.Record({'x': ootype.Signed})
+ NULL = ootype.null(System.Object._INSTANCE)
+ record = cast_record_to_object(ootype.new(T))
+ assert record != NULL
+ assert NULL != record
+
+
class TestPythonnet(TestDotnetRtyping):
# don't interpreter functions but execute them directly through pythonnet
def interpret(self, f, args, backendopt='ignored'):
More information about the Pypy-commit
mailing list