Author: Stephan <step...@stzal.com>
Branch: 
Changeset: r273:50111a408fd7
Date: 2012-08-04 11:59 +0200
http://bitbucket.org/pypy/lang-js/changeset/50111a408fd7/

Log:    better option handling added option for test-eval

diff --git a/js/builtins_interpreter.py b/js/builtins_interpreter.py
--- a/js/builtins_interpreter.py
+++ b/js/builtins_interpreter.py
@@ -7,6 +7,7 @@
     put_native_function(global_object, u'load', js_load)
     put_native_function(global_object, u'debug', js_debug)
 
+    ## the tests expect eval to return "error" on an exception
     if overwrite_eval is True:
         from js.builtins import put_intimate_function
         del(global_object._properties_[u'eval'])
@@ -25,8 +26,9 @@
 @w_return
 def js_debug(this, args):
     from js.object_space import object_space
-    object_space.DEBUG = not object_space.DEBUG
-    return object_space.DEBUG
+    config = object_space.interpreter.config
+    config.debug = not config.debug
+    return config.debug
 
 def overriden_eval(ctx):
     from js.builtins_global import js_eval
diff --git a/js/interpreter.py b/js/interpreter.py
--- a/js/interpreter.py
+++ b/js/interpreter.py
@@ -1,4 +1,3 @@
-from pypy.rlib.objectmodel import we_are_translated
 from pypy.rlib.streamio import open_file_as_stream
 
 def load_file(filename):
@@ -13,20 +12,26 @@
     f.close()
     return ast
 
+class InterpreterConfig(object):
+    def __init__(self, config = {}):
+        self.debug = config.get('debug', False)
+        self.no_exception_jseval = config.get('no-exception-jseval', False)
+
 class Interpreter(object):
     """Creates a js interpreter"""
-    def __init__(self):
+    def __init__(self, config = {}):
         from js.jsobj import W_GlobalObject
         from js.object_space import object_space
         import js.builtins
         import js.builtins_interpreter
 
+        self.config = InterpreterConfig(config)
         self.global_object = W_GlobalObject()
         object_space.global_object = self.global_object
         object_space.interpreter = self
 
         js.builtins.setup_builtins(self.global_object)
-        js.builtins_interpreter.setup_builtins(self.global_object, 
overwrite_eval = True)
+        js.builtins_interpreter.setup_builtins(self.global_object, 
self.config.no_exception_jseval)
 
         object_space.assign_proto(self.global_object)
 
@@ -44,7 +49,8 @@
 
     def run_src(self, src):
         from js.astbuilder import parse_to_ast
-        ast = parse_to_ast(unicode(src))
+        from runistr import decode_str_utf8
+        ast = parse_to_ast(decode_str_utf8(src))
         return self.run_ast(ast)
 
     def run(self, code, interactive=False):
diff --git a/js/jscode.py b/js/jscode.py
--- a/js/jscode.py
+++ b/js/jscode.py
@@ -208,7 +208,7 @@
 
     def run(self, ctx):
         from js.object_space import object_space
-        debug = object_space.DEBUG
+        debug = object_space.interpreter.config.debug
         from js.completion import NormalCompletion, is_completion, 
is_return_completion, is_empty_completion
         from js.opcodes import RETURN, BaseJump
         from js.jsobj import w_Undefined
diff --git a/js/object_space.py b/js/object_space.py
--- a/js/object_space.py
+++ b/js/object_space.py
@@ -12,7 +12,6 @@
         self.proto_date = w_Null
         self.proto_object = w_Null
         self.interpreter = None
-        self.DEBUG = False
 
     def get_global_environment(self):
         return self.global_context.variable_environment()
diff --git a/js/py-js.py b/js/py-js.py
--- a/js/py-js.py
+++ b/js/py-js.py
@@ -8,24 +8,21 @@
 def main(argv):
     opts, files = parse_args(argv)
 
-    debug = opts.get('debug', False)
-    inspect = opts.get('inspect', False)
-
     try:
-        run(files, debug, inspect)
+        run(files, opts)
     except SystemExit:
         printmessage(u"\n")
 
     return 0
 
-def run(files, debug, inspect):
+def run(files, opts):
     from js.object_space import object_space
     from js.interpreter import Interpreter
 
     interactive = len(files) == 0
+    inspect = opts.get('inspect', False)
 
-    object_space.DEBUG = debug
-    interp = Interpreter()
+    interp = Interpreter(opts)
 
     for f in files:
         try:
@@ -90,20 +87,19 @@
             raise SystemExit
     return "".join(result)
 
+def _parse_bool_arg(arg_name, argv):
+    for i in xrange(len(argv)):
+        if argv[i] == arg_name:
+            del(argv[i])
+            return True
+    return False
+
 def parse_args(argv):
-    opts = {'inspect': False, 'debug': False}
+    opts = {}
 
-    for i in xrange(len(argv)):
-        if argv[i] == '-d':
-            opts['debug'] = True
-            del(argv[i])
-            break
-
-    for i in xrange(len(argv)):
-        if argv[i] == '-i':
-            opts['inspect'] = True
-            del(argv[i])
-            break
+    opts['debug'] = _parse_bool_arg('-d', argv) or _parse_bool_arg('--debug', 
argv)
+    opts['inspect'] = _parse_bool_arg('-i', argv) or 
_parse_bool_arg('--inspect', argv)
+    opts['no-exception-jseval'] = _parse_bool_arg('--no-exception-jseval', 
argv)
 
     del(argv[0])
 
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to