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