[pypy-svn] r27774 - in pypy/dist/pypy/translator/cli: . src test
antocuni at codespeak.net
antocuni at codespeak.net
Sat May 27 21:10:43 CEST 2006
Author: antocuni
Date: Sat May 27 21:10:23 2006
New Revision: 27774
Modified:
pypy/dist/pypy/translator/cli/cts.py
pypy/dist/pypy/translator/cli/database.py
pypy/dist/pypy/translator/cli/metavm.py
pypy/dist/pypy/translator/cli/src/pypylib.cs
pypy/dist/pypy/translator/cli/test/runtest.py
pypy/dist/pypy/translator/cli/test/test_runtest.py
Log:
Added basic string support.
Modified: pypy/dist/pypy/translator/cli/cts.py
==============================================================================
--- pypy/dist/pypy/translator/cli/cts.py (original)
+++ pypy/dist/pypy/translator/cli/cts.py Sat May 27 21:10:23 2006
@@ -29,6 +29,7 @@
ootype.Char: 'char',
ootype.UniChar: 'char',
ootype.Class: 'class [mscorlib]System.Type',
+ ootype.String: 'string',
# maps generic types to their ordinal
ootype.List.SELFTYPE_T: 'class ' + (PYPY_LIST % '!0'),
Modified: pypy/dist/pypy/translator/cli/database.py
==============================================================================
--- pypy/dist/pypy/translator/cli/database.py (original)
+++ pypy/dist/pypy/translator/cli/database.py Sat May 27 21:10:23 2006
@@ -132,6 +132,8 @@
return RecordConst(db, const)
elif isinstance(const, ootype._list):
return ListConst(db, const)
+ elif isinstance(const, ootype._string):
+ return StringConst(db, const)
else:
assert False, 'Unknown constant: %s' % const
make = staticmethod(make)
@@ -165,6 +167,27 @@
def init(self, ilasm):
pass
+class StringConst(AbstractConst):
+ def __init__(self, db, string):
+ self.db = db
+ self.cts = CTS(db)
+ self.string = string
+
+ def __hash__(self):
+ return hash(self.string)
+
+ def __eq__(self, other):
+ return self.string == other.string
+
+ def get_name(self):
+ return 'string_literal'
+
+ def get_type(self, include_class=True):
+ return self.cts.lltype_to_cts(ootype.String, include_class)
+
+ def init(self, ilasm):
+ ilasm.opcode('ldstr', '"%s"' % self.string._str)
+
class RecordConst(AbstractConst):
def __init__(self, db, record):
self.db = db
Modified: pypy/dist/pypy/translator/cli/metavm.py
==============================================================================
--- pypy/dist/pypy/translator/cli/metavm.py (original)
+++ pypy/dist/pypy/translator/cli/metavm.py Sat May 27 21:10:23 2006
@@ -73,7 +73,7 @@
for arg in args: # push parametes
generator.load(arg)
generator.call_method(this.concretetype, method_name)
-
+
class _CallMethod(_Call):
def render(self, generator, op):
Modified: pypy/dist/pypy/translator/cli/src/pypylib.cs
==============================================================================
--- pypy/dist/pypy/translator/cli/src/pypylib.cs (original)
+++ pypy/dist/pypy/translator/cli/src/pypylib.cs Sat May 27 21:10:23 2006
@@ -12,6 +12,8 @@
public static string ToPython(uint x) { return x.ToString(); }
public static string ToPython(long x) { return x.ToString(); }
public static string ToPython(ulong x) { return x.ToString(); }
+ // XXX: it does not support strings containing "'".
+ public static string ToPython(string x) { return string.Format("'{0}'", x); }
public static string ToPython(object obj)
{
@@ -33,7 +35,6 @@
{
return t.GetConstructor(new Type[0]).Invoke(new object[0]);
}
-
}
//The public interface List must implement is defined in
Modified: pypy/dist/pypy/translator/cli/test/runtest.py
==============================================================================
--- pypy/dist/pypy/translator/cli/test/runtest.py (original)
+++ pypy/dist/pypy/translator/cli/test/runtest.py Sat May 27 21:10:23 2006
@@ -34,7 +34,7 @@
assert res1 == res2
def format_object(TYPE, ilasm):
- if isinstance(TYPE, (ootype.BuiltinType, ootype.Instance)):
+ if isinstance(TYPE, (ootype.BuiltinType, ootype.Instance)) and TYPE is not ootype.String:
ilasm.call_method('string object::ToString()', virtual=True)
elif TYPE is ootype.Void:
ilasm.opcode('ldstr "None"')
@@ -224,7 +224,7 @@
assert issubclass(eval(res.class_name), exception)
def ll_to_string(self, s):
- py.test.skip('ll_to_string not supported, yet')
+ return s
def ll_to_list(self, l):
return l
Modified: pypy/dist/pypy/translator/cli/test/test_runtest.py
==============================================================================
--- pypy/dist/pypy/translator/cli/test/test_runtest.py (original)
+++ pypy/dist/pypy/translator/cli/test/test_runtest.py Sat May 27 21:10:23 2006
@@ -31,6 +31,12 @@
return 1, 2
assert self.interpret(fn, []) == (1, 2)
+ def test_string(self):
+ def fn():
+ return 'foo'
+ res = self.interpret(fn, [])
+ assert self.ll_to_string(res) == 'foo'
+
def test_exception(self):
def fn():
raise ValueError
More information about the Pypy-commit
mailing list