[pypy-svn] r28881 - in pypy/dist/pypy/translator/cli: . src test
antocuni at codespeak.net
antocuni at codespeak.net
Fri Jun 16 15:38:05 CEST 2006
Author: antocuni
Date: Fri Jun 16 15:37:51 2006
New Revision: 28881
Added:
pypy/dist/pypy/translator/cli/test/test_primitive.py (contents, props changed)
Modified:
pypy/dist/pypy/translator/cli/function.py
pypy/dist/pypy/translator/cli/src/pypylib.cs
Log:
Added support for suggested_primitive.
Added support for time.time().
Modified: pypy/dist/pypy/translator/cli/function.py
==============================================================================
--- pypy/dist/pypy/translator/cli/function.py (original)
+++ pypy/dist/pypy/translator/cli/function.py Fri Jun 16 15:37:51 2006
@@ -46,10 +46,40 @@
def _is_raise_block(self, block):
return (not block.exits) and len(block.inputargs) == 2
+ def _render_primitive(self, ilasm):
+ self.ilasm = ilasm
+ graph = self.graph
+ func_name = graph.func.func_name
+ returntype, returnvar = self.cts.llvar_to_cts(graph.getreturnvar())
+
+ if self.is_method:
+ args = self.args[1:] # self is implicit
+ meth_type = 'virtual' # TODO: mark as virtual only when strictly necessary
+ else:
+ args = self.args
+ meth_type = 'static'
+
+ self.ilasm.begin_function(self.name, args, returntype, self.is_entrypoint, meth_type)
+ if func_name == 'll_time_time':
+ ilasm.opcode('call float64 [pypylib]pypy.runtime.Utils::Time()')
+ else:
+ assert False, 'Unknown primitive function: %s' % func
+
+ self.ilasm.opcode('ret')
+ self.ilasm.end_function()
+ if self.is_method:
+ pass # TODO
+ else:
+ self.db.record_function(self.graph, self.name)
+
def render(self, ilasm):
if self.db.graph_name(self.graph) is not None and not self.is_method:
return # already rendered
+ if getattr(self.graph.func, 'suggested_primitive', False):
+ self._render_primitive(ilasm) # XXX: refactoring needed
+ return
+
self.ilasm = ilasm
graph = self.graph
returntype, returnvar = self.cts.llvar_to_cts(graph.getreturnvar())
@@ -61,7 +91,7 @@
args = self.args
meth_type = 'static'
- self.ilasm.begin_function(self.name, args, returntype, self.is_entrypoint, meth_type)
+ self.ilasm.begin_function(self.name, args, returntype, self.is_entrypoint, meth_type)
self.ilasm.locals(self.locals)
return_blocks = []
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 Fri Jun 16 15:37:51 2006
@@ -85,6 +85,12 @@
{
return Convert.ToInt32(s, base_);
}
+
+ public static double Time()
+ {
+ TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
+ return t.TotalSeconds;
+ }
}
public class StringBuilder
Added: pypy/dist/pypy/translator/cli/test/test_primitive.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/cli/test/test_primitive.py Fri Jun 16 15:37:51 2006
@@ -0,0 +1,13 @@
+import os
+import time
+
+from pypy.translator.cli.test.runtest import CliTest
+
+class TestPrimitive(CliTest):
+
+ def test_time_time(self):
+ def fn():
+ return time.time()
+ t1 = self.interpret(fn, [])
+ t2 = self.interpret(fn, [])
+ assert t1 <= t2
More information about the Pypy-commit
mailing list