Author: Tim Felgentreff <[email protected]>
Branch: 
Changeset: r132:eae827dda441
Date: 2013-03-07 13:02 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/eae827dda441/

Log:    (tfel, lwassermann) Update targetimageloading to accept benchmark
        argument and jit args, and run the actual image if no benchmark is
        passed

diff --git a/targetimageloadingsmalltalk.py b/targetimageloadingsmalltalk.py
--- a/targetimageloadingsmalltalk.py
+++ b/targetimageloadingsmalltalk.py
@@ -1,80 +1,115 @@
 import sys
 import os
-from spyvm import model, interpreter, primitives, shadow
-# from spyvm import classtable
-# from spyvm.test.test_interpreter import *
-from spyvm import squeakimage
-from spyvm import constants
 
-def tinyBenchmarks(space, image_name):
-    interp = interpreter.Interpreter(space, image_name=image_name)
-    return interp
+from rpython.rlib.streamio import open_file_as_stream
+from rpython.rlib import jit
 
+from spyvm import model, interpreter, squeakimage, objspace, wrapper, model
+from spyvm.tool.analyseimage import create_image
 
-def run_benchmarks(interp, number, benchmark):
-    counter = 0
+
+def _run_benchmark(interp, number, benchmark):
     w_object = model.W_SmallInteger(number)
     try:
-        interp.perform(w_object, "tinyBenchmarks")
+        interp.perform(w_object, benchmark)
     except interpreter.ReturnFromTopLevel, e:
         w_result = e.object
-
         assert isinstance(w_result, model.W_BytesObject)
         print w_result.as_string()
         return 0
     return -1
 
-from spyvm import objspace
+
+def _run_image(interp):
+    ap = wrapper.ProcessWrapper(space, 
wrapper.scheduler(space).active_process())
+    w_ctx = ap.suspended_context()
+    assert isinstance(w_ctx, model.W_PointersObject)
+    ap.store_suspended_context(space.w_nil)
+    interp.interpret_with_w_frame(w_ctx)
+    return 0
+
+
 space = objspace.ObjSpace()
 
+
+def _usage(argv):
+    print """
+    Usage: %s
+          -j|--jit [jitargs]
+          -n|--number [smallint]
+          -m|--method [benchmark on smallint]
+          [image path, default: Squeak.image]
+    """ % argv[0]
+
+
+def _arg_missing(argv, idx, arg):
+    if len(argv) == idx + 1:
+        raise RuntimeError("Error: missing argument after %s" % arg)
+
+
 def entry_point(argv):
-    if len(argv) > 1:
-        filename = argv[1]
-        if len(argv) > 3:
-            number = int(argv[2])
-            benchmark = argv[3]
+    idx = 1
+    image = None
+    number = 0
+    benchmark = None
+
+    while idx < len(argv):
+        arg = argv[idx]
+        if arg in ["-h", "--help"]:
+            _usage(argv)
+            return 0
+        elif arg in ["-j", "--jit"]:
+            _arg_missing(argv, idx, arg)
+            jitarg = argv[idx + 1]
+            idx += 1
+            jit.set_user_param(interpreter.Interpreter.jit_driver, jitarg)
+        elif arg in ["-n", "--number"]:
+            _arg_missing(argv, idx, arg)
+            number = int(argv[idx + 1])
+            idx += 1
+        elif arg in ["-m", "--method"]:
+            _arg_missing(argv, idx, arg)
+            benchmark = argv[idx + 1]
+            idx += 1
+        elif image is None:
+            image = argv[idx]
         else:
-            number = 0
-            benchmark = "tinyBenchmarks"
+            _usage(argv)
+            return -1
+        idx += 1
+
+    if image is None:
+        image = "Squeak.image"
+
+    try:
+        f = open_file_as_stream(image)
+    except OSError as e:
+        os.write(2, "%s -- %s (LoadError)\n" % (os.strerror(e.errno), image))
+        return 1
+    try:
+        imagedata = f.readall()
+    finally:
+        f.close()
+
+    image_reader = squeakimage.reader_for_image(space, 
squeakimage.Stream(data=imagedata))
+    image = create_image(space, image_reader)
+    interp = interpreter.Interpreter(space, image)
+    if benchmark is not None:
+        return _run_benchmark(interp, number, benchmark)
     else:
-        print "usage:", argv[0], "<image name>"
-        return -1
-    reader = squeakimage.reader_for_image(space, 
squeakimage.Stream(DummyFile(filename)))
-    reader.initialize()
-    image = squeakimage.SqueakImage()
-    image.from_reader(space, reader)
-    interp = interpreter.Interpreter(space, image, filename)
-    run_benchmarks(interp, number, benchmark)
-    return 0
+        return _run_image(interp)
 
 # _____ Define and setup target ___
 
+
 def target(*args):
     return entry_point, None
 
+
 def jitpolicy(self):
     from rpython.jit.codewriter.policy import JitPolicy
     return JitPolicy()
 
 
-class DummyFile:
-    def __init__(self,filename):
-        import os
-        fd = os.open(filename, os.O_RDONLY, 0777)
-        try:
-            content = []
-            while 1:
-                s = os.read(fd, 4096)
-                if not s:
-                    break
-                content.append(s)
-            self.content = "".join(content)
-        finally:
-            os.close(fd)
-    def read(self):
-        return self.content
-    def close(self):
-        pass
-
 if __name__ == "__main__":
     entry_point(sys.argv)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to