Author: Stephan <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit