[pypy-svn] r48800 - in pypy/dist/pypy/translator/llvm: . module test

rxe at codespeak.net rxe at codespeak.net
Mon Nov 19 16:32:38 CET 2007


Author: rxe
Date: Mon Nov 19 16:32:38 2007
New Revision: 48800

Modified:
   pypy/dist/pypy/translator/llvm/genllvm.py
   pypy/dist/pypy/translator/llvm/module/genexterns.c
   pypy/dist/pypy/translator/llvm/test/runtest.py
Log:
resolve some XXXs - mostly by just removing them.

Modified: pypy/dist/pypy/translator/llvm/genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/genllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/genllvm.py	Mon Nov 19 16:32:38 2007
@@ -82,6 +82,30 @@
             create ll file for c file
             create codewriter """
 
+        if self.standalone:
+            # XXX this requires jumping through way too many hoops
+
+            from pypy.rpython.lltypesystem import rffi            
+            getargc = rffi.llexternal('__pypy_getargc', [], rffi.INT)
+            getargv = rffi.llexternal('__pypy_getargv', [], rffi.CCHARPP)
+
+            def entry_point(args=None):
+                argc = getargc()
+                argv = getargv()
+                if args is None:
+                    args = []
+                for ii in range(argc):
+                    s = rffi.charp2str(argv[ii])
+                    args.append(s)
+                return func(args)
+            from pypy.annotation.listdef import s_list_of_strings
+            graph = self.translator.rtyper.annotate_helper(entry_point, [s_list_of_strings])
+            self.translator.rtyper.specialize_more_blocks()
+            # XXX this is really bad
+            from pypy.translator.backendopt.all import backend_optimizations
+            backend_optimizations(self.translator)
+            func = entry_point
+
         # XXX please dont ask!
         from pypy.translator.c.genc import CStandaloneBuilder
         cbuild = CStandaloneBuilder(self.translator, func, config=self.config)

Modified: pypy/dist/pypy/translator/llvm/module/genexterns.c
==============================================================================
--- pypy/dist/pypy/translator/llvm/module/genexterns.c	(original)
+++ pypy/dist/pypy/translator/llvm/module/genexterns.c	Mon Nov 19 16:32:38 2007
@@ -47,41 +47,16 @@
 
 #ifdef ENTRY_POINT_DEFINED
 
-int __ENTRY_POINT__(RPyListOfString *);
+int __ENTRY_POINT__(voidzd *);
 
-int main(int argc, char *argv[])
-{
-    XXX
-    char *errmsg;
-    int i, exitcode;
-    RPyListOfString *list;
-    errmsg = RPython_StartupCode();
-    if (errmsg) goto error;
-    
-    list = _RPyListOfString_New(argc);
-    if (_RPyExceptionOccurred()) goto memory_out;
-    for (i=0; i<argc; i++) {
-      RPyString *s = RPyString_FromString(argv[i]);
-
-      if (_RPyExceptionOccurred()) {
-	goto memory_out;
-      }
-
-      _RPyListOfString_SetItem(list, i, s);
-    }
-
-    exitcode = __ENTRY_POINT__(list);
-
-    if (_RPyExceptionOccurred()) {
-      goto error; // XXX see genc
-    }
-    return exitcode;
-
- memory_out:
-    errmsg = "out of memory";
- error:
+int main(int argc, char *argv[]) {
+  char *errmsg = RPython_StartupCode();
+  if (errmsg) {
     fprintf(stderr, "Fatal error during initialization: %s\n", errmsg);
     return 1;
+  }
+
+  return __ENTRY_POINT__(NULL);
 }
 
 #else

Modified: pypy/dist/pypy/translator/llvm/test/runtest.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/test/runtest.py	(original)
+++ pypy/dist/pypy/translator/llvm/test/runtest.py	Mon Nov 19 16:32:38 2007
@@ -156,8 +156,8 @@
     driver.compile() 
     if conftest.option.view:
         driver.translator.view()
-    return driver.c_module, driver.c_entryp
-
+    return driver
+    
 def compile_test(function, annotation, isolate_hint=True, **kwds):
     " returns module and compiled function "    
     llvm_test()
@@ -171,8 +171,9 @@
     # maintain only 3 isolated process (if any)
     _cleanup(leave=3)
     optimize = kwds.pop('optimize', optimize_tests)
-    mod, fn = genllvm_compile(function, annotation, optimize=optimize,
-                              isolate=isolate, **kwds)
+    driver = genllvm_compile(function, annotation, optimize=optimize,
+                             isolate=isolate, **kwds)
+    mod, fn = driver.c_module, driver.c_entryp
     if isolate:
         _ext_modules.append(mod)
     return mod, wrapfn(fn)
@@ -181,6 +182,9 @@
     " returns compiled function "
     return compile_test(function, annotation, isolate_hint=isolate_hint, **kwds)[1]
 
+def compile_standalone(function, **kwds):
+    optimize = kwds.pop('optimize', optimize_tests)
+    drvier = genllvm_compile(function, None, optimize=optimize, **kwds)
 #______________________________________________________________________________
 
 # XXX Work in progress, this was mostly copied from cli



More information about the Pypy-commit mailing list