[pypy-svn] r28977 - in pypy/dist/pypy/translator/js: . modules/test

fijal at codespeak.net fijal at codespeak.net
Tue Jun 20 11:41:39 CEST 2006


Author: fijal
Date: Tue Jun 20 11:41:37 2006
New Revision: 28977

Modified:
   pypy/dist/pypy/translator/js/asmgen.py
   pypy/dist/pypy/translator/js/database.py
   pypy/dist/pypy/translator/js/js.py
   pypy/dist/pypy/translator/js/jsbuiltin.py
   pypy/dist/pypy/translator/js/jts.py
   pypy/dist/pypy/translator/js/metavm.py
   pypy/dist/pypy/translator/js/modules/test/test_dom.py
Log:
Added semi-transparent proxy and bugfixes.


Modified: pypy/dist/pypy/translator/js/asmgen.py
==============================================================================
--- pypy/dist/pypy/translator/js/asmgen.py	(original)
+++ pypy/dist/pypy/translator/js/asmgen.py	Tue Jun 20 11:41:37 2006
@@ -71,7 +71,7 @@
         self.codegenerator.openblock()
     
     def begin_method(self, name, _class, arglist):
-        args = ",".join([i[1] for i in arglist])
+        args = ",".join(arglist)
         self.codegenerator.write("%s.prototype.%s = function (%s)"%(_class, name, args))
         self.codegenerator.openblock()
     
@@ -79,14 +79,14 @@
         self.codegenerator.closeblock()
         self.codegenerator.writeline("")
     
-    def locals(self, loc):
-        self.codegenerator.writeline("var "+",".join([i[1] for i in loc])+";")
-    
     def load_arg(self, v):
         self.right_hand.append(v.name)
     
     def store_local(self, v):
-        name = self.subst_table.get(v.name, v.name)
+        self.store_name(v.name)
+    
+    def store_name(self, name):
+        name = self.subst_table.get(name, name)
         element = self.right_hand.pop()
         if element != name:
             self.codegenerator.writeline("%s = %s;"%(name, element))

Modified: pypy/dist/pypy/translator/js/database.py
==============================================================================
--- pypy/dist/pypy/translator/js/database.py	(original)
+++ pypy/dist/pypy/translator/js/database.py	Tue Jun 20 11:41:37 2006
@@ -18,6 +18,7 @@
 
 from pypy.objspace.flow.model import Variable, Constant
 from pypy.translator.js.modules import dom
+from pypy.translator.js.commproxy import XmlHttp
 
 try:
     set
@@ -43,6 +44,7 @@
         self.backend_mapping = backend_mapping
         self.cts = self.type_system_class(self)
         self.prepare_builtins()
+        self.proxies = []
     
     def prepare_builtins(self):
         # Document Object Model elements
@@ -90,6 +92,12 @@
 
     def record_class(self, classdef, name):
         self.classes[classdef] = name
+    
+    def register_comm_proxy(self, proxy_const, name):
+        """ Register external object which should be rendered as
+        method call
+        """
+        self.proxies.append(XmlHttp(proxy_const, name))
 
     def graph_name(self, graph):
         return self.functions.get(graph, None)
@@ -373,7 +381,7 @@
 
     def init_fields(self, ilasm, const_var, name):
         for i in self.const._dict:
-            ilasm.load_local(const_var)
+            ilasm.load_str("%s.%s"%(const_var.name, name))
             el = self.const._dict[i]
             self.db.load_const(typeOf(el), el, ilasm)
             self.db.load_const(typeOf(i), i, ilasm)
@@ -396,5 +404,5 @@
         return self.const._TYPE._name.split('.')[-1][:-2]
     
     def init(self, ilasm):
-        #import pdb; pdb.set_trace()
+        self.db.register_comm_proxy(self.const, self.name)
         ilasm.new(self.get_name())

Modified: pypy/dist/pypy/translator/js/js.py
==============================================================================
--- pypy/dist/pypy/translator/js/js.py	(original)
+++ pypy/dist/pypy/translator/js/js.py	Tue Jun 20 11:41:37 2006
@@ -60,6 +60,13 @@
                 i.render(self.ilasm)
             
             node.render(self.ilasm)
+    
+    def generate_communication_proxy(self):
+        """ Render necessary stuff aroundc communication
+        proxies
+        """
+        for proxy in self.db.proxies:
+            proxy.render(self.ilasm)
         
     def write_source(self):
         
@@ -69,12 +76,14 @@
         # this is just workaround
         
         self.generate_source()
-
+        
         data = self.tmpfile.open().read()
         src_filename = _path_join(os.path.dirname(__file__), 'jssrc', 'misc.js')
         f = self.tmpfile.open("w")
         s = open(src_filename).read()
         f.write(s)
+        self.ilasm = self.backend_mapping['asm_class'](f, self.assembly_name )
+        self.generate_communication_proxy()
         f.write(data)
         f.close()
         

Modified: pypy/dist/pypy/translator/js/jsbuiltin.py
==============================================================================
--- pypy/dist/pypy/translator/js/jsbuiltin.py	(original)
+++ pypy/dist/pypy/translator/js/jsbuiltin.py	Tue Jun 20 11:41:37 2006
@@ -3,7 +3,7 @@
 
 from pypy.translator.oosupport.metavm import InstructionList, PushAllArgs
 from pypy.translator.js.metavm import SetBuiltinField, ListGetitem, ListSetitem, \
-    GetBuiltinField, CallBuiltin, Call, SetTimeout, XmlSetCallback
+    GetBuiltinField, CallBuiltin, Call, SetTimeout, XmlSetCallback, ListContains
 
 from pypy.rpython.ootypesystem import ootype
 
@@ -41,6 +41,10 @@
                 '_ll_resize_ge' : list_resize,
                 '_ll_resize_le' : list_resize,
                 'll_length' : lambda g,op: GetBuiltinField.run_it(g, op.args[1], 'length'),
+            },
+            ootype.Dict: {
+                'll_get' : ListGetitem,
+                'll_contains' : ListContains,
             }
         }
 

Modified: pypy/dist/pypy/translator/js/jts.py
==============================================================================
--- pypy/dist/pypy/translator/js/jts.py	(original)
+++ pypy/dist/pypy/translator/js/jts.py	Tue Jun 20 11:41:37 2006
@@ -83,12 +83,12 @@
             else:
                 val = 'true'
         elif _type is Void:
-            if isinstance(v, FunctionType):
-                graph = self.db.translator.annotator.bookkeeper.getdesc(v).cachedgraph(None)
-                self.db.pending_function(graph)
-                val = graph.name
-            else:
-                val = 'undefined'
+            #if isinstance(v, FunctionType):
+            #    graph = self.db.translator.annotator.bookkeeper.getdesc(v).cachedgraph(None)
+            #    self.db.pending_function(graph)
+            #    val = graph.name
+            #else:
+            val = 'undefined'
         elif isinstance(_type,String.__class__):
             val = '%r'%v._str
         elif isinstance(_type,List):

Modified: pypy/dist/pypy/translator/js/metavm.py
==============================================================================
--- pypy/dist/pypy/translator/js/metavm.py	(original)
+++ pypy/dist/pypy/translator/js/metavm.py	Tue Jun 20 11:41:37 2006
@@ -23,6 +23,15 @@
         generator.ilasm.list_getitem()
 ListGetitem = _ListGetitem()
 
+class _ListContains(MicroInstruction):
+    def render(self, generator, op):
+        generator.load(op.args[1])
+        generator.load(op.args[2])
+        generator.ilasm.list_getitem()
+        generator.ilasm.load_void()
+        generator.emit('!=')
+ListContains = _ListContains()
+
 class _Call(MicroInstruction):
     def render(self, generator, op):
         graph = op.args[0].value.graph

Modified: pypy/dist/pypy/translator/js/modules/test/test_dom.py
==============================================================================
--- pypy/dist/pypy/translator/js/modules/test/test_dom.py	(original)
+++ pypy/dist/pypy/translator/js/modules/test/test_dom.py	Tue Jun 20 11:41:37 2006
@@ -105,15 +105,15 @@
 ##    xml.onreadystatechange = ping_fun
 ##    xml.send(None)
 
-def send_ping_request():
-    pass
+def got_ping_request(data):
+    return data['a']
 
 def test_bnb():
     """ Higher level XMLHttpRequest
     """
     def bnb_fun():
         from pypy.translator.js.proxy.testme.controllers import RootInstance
-        RootInstance.ping(send_ping_request)
+        RootInstance.ping(got_ping_request)
     
     from pypy.translator.js.proxy.testme.controllers import Root
     fn = compile_function(bnb_fun, [], root = Root)



More information about the Pypy-commit mailing list