[pypy-svn] r31650 - in pypy/dist/pypy: bin translator/js

micktwomey at codespeak.net micktwomey at codespeak.net
Fri Aug 25 18:09:55 CEST 2006


Author: micktwomey
Date: Fri Aug 25 18:09:50 2006
New Revision: 31650

Added:
   pypy/dist/pypy/translator/js/main.py
Modified:
   pypy/dist/pypy/bin/jscompile.py
Log:
Refactored js backend main call rpython2javascript.


Modified: pypy/dist/pypy/bin/jscompile.py
==============================================================================
--- pypy/dist/pypy/bin/jscompile.py	(original)
+++ pypy/dist/pypy/bin/jscompile.py	Fri Aug 25 18:09:50 2006
@@ -6,55 +6,7 @@
 import autopath
 import sys
 
-from pypy.translator.js.test.runtest import compile_function
-#from pypy.translator.translator import TranslationContext
-from pypy.translator.driver import TranslationDriver
-from pypy.translator.js.js import JS
-from pypy.tool.error import AnnotatorError, FlowingError, debug
-from pypy.rpython.nonconst import NonConstant
-from pypy.annotation.policy import AnnotatorPolicy
+from pypy.translator.js.main import rpython2javascript_main
 
-class FunctionNotFound(Exception):
-    pass
-
-class BadSignature(Exception):
-    pass
-
-class JsPolicy(AnnotatorPolicy):
-    allow_someobjects = False
-
-def get_args(func_data):
-    l = []
-    for i in xrange(func_data.func_code.co_argcount):
-        l.append("NonConstant(%s)" % repr(func_data.func_defaults[i]))
-    return "(%s)" % ",".join(l)
-
-def rpython2javascript(argv):
-    if len(argv) < 2:
-        print __doc__
-        sys.exit(0)
-    module_name = argv[0]
-    function_names = argv[1:]
-    mod = __import__(module_name, None, None, ["Module"])
-    for func_name in function_names:
-        if func_name not in mod.__dict__:
-            raise FunctionNotFound("function %r was not found in module %r" % (func_name, module_name))
-        func_code = mod.__dict__[func_name]
-        if func_code.func_code.co_argcount > 0 and func_code.func_code.co_argcount != len(func_code.func_defaults):
-            raise BadSignature("Function %s does not have default arguments" % func_name)
-    source_ssf = "\n".join(["import %s" % module_name, "def some_strange_function_which_will_never_be_called():"] + ["  "+\
-        module_name+"."+fun_name+get_args(mod.__dict__[func_name]) for fun_name in function_names])
-    print source_ssf
-    exec(source_ssf) in globals()
-    #fn = compile_function([mod.__dict__[f_name] for f_name in function_names], [[] for i in function_names])
-    # now we gonna just cut off not needed function
-    driver = TranslationDriver()
-    try:
-        driver.setup(some_strange_function_which_will_never_be_called, [], policy = JsPolicy())
-        driver.proceed(["compile_js"])
-    except Exception, e:
-        # do something nice with it
-        debug(driver)
-    
 if __name__ == '__main__':
-    rpython2javascript(sys.argv[1:])
+    rpython2javascript_main(sys.argv[1:])

Added: pypy/dist/pypy/translator/js/main.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/js/main.py	Fri Aug 25 18:09:50 2006
@@ -0,0 +1,57 @@
+"""Contains high level javascript compilation function
+"""
+
+from pypy.translator.js.test.runtest import compile_function
+#from pypy.translator.translator import TranslationContext
+from pypy.translator.driver import TranslationDriver
+from pypy.translator.js.js import JS
+from pypy.tool.error import AnnotatorError, FlowingError, debug
+from pypy.rpython.nonconst import NonConstant
+from pypy.annotation.policy import AnnotatorPolicy
+
+class FunctionNotFound(Exception):
+    pass
+
+class BadSignature(Exception):
+    pass
+
+class JsPolicy(AnnotatorPolicy):
+    allow_someobjects = False
+
+def get_args(func_data):
+    l = []
+    for i in xrange(func_data.func_code.co_argcount):
+        l.append("NonConstant(%s)" % repr(func_data.func_defaults[i]))
+    return "(%s)" % ",".join(l)
+
+def rpython2javascript_main(argv):
+    if len(argv) < 2:
+        print __doc__
+        sys.exit(0)
+    module_name = argv[0]
+    function_names = argv[1:]
+    mod = __import__(module_name, None, None, ["Module"])
+    rpython2javascript(mod, function_names)
+
+def rpython2javascript(mod, function_names):
+    module_name = mod.__name__
+    for func_name in function_names:
+        if func_name not in mod.__dict__:
+            raise FunctionNotFound("function %r was not found in module %r" % (func_name, module_name))
+        func_code = mod.__dict__[func_name]
+        if func_code.func_code.co_argcount > 0 and func_code.func_code.co_argcount != len(func_code.func_defaults):
+            raise BadSignature("Function %s does not have default arguments" % func_name)
+    source_ssf = "\n".join(["import %s" % module_name, "def some_strange_function_which_will_never_be_called():"] + ["  "+\
+        module_name+"."+fun_name+get_args(mod.__dict__[func_name]) for fun_name in function_names])
+    print source_ssf
+    exec(source_ssf) in globals()
+    #fn = compile_function([mod.__dict__[f_name] for f_name in function_names], [[] for i in function_names])
+    # now we gonna just cut off not needed function
+    driver = TranslationDriver()
+    try:
+        driver.setup(some_strange_function_which_will_never_be_called, [], policy = JsPolicy())
+        driver.proceed(["compile_js"])
+        return driver.gen.tmpfile.open().read()
+    except Exception, e:
+        # do something nice with it
+        debug(driver)



More information about the Pypy-commit mailing list