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