[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