def _exec_(self, source): source = '''\ (function() {{ {0}; {1}; }})()'''.format(encode_unicode_codepoints(self._source), encode_unicode_codepoints(source)) source = str(source) # backward compatibility with PyV8.JSContext() as ctxt, PyV8.JSEngine() as engine: js_errors = (PyV8.JSError, IndexError, ReferenceError, SyntaxError, TypeError) try: script = engine.compile(source) except js_errors as e: raise exceptions.ProgramError(e) try: value = script.run() except js_errors as e: raise exceptions.ProgramError(e) return self.convert(value)
def _exec_(self, source): source = '''\ (function() {{ {0}; {1}; }})()'''.format( encode_unicode_codepoints(self._source), encode_unicode_codepoints(source) ) source = str(source) # backward compatibility with contextlib.nested(PyV8.JSContext(), PyV8.JSEngine()) as (ctxt, engine): js_errors = (PyV8.JSError, IndexError, ReferenceError, SyntaxError, TypeError) try: script = engine.compile(source) except js_errors as e: raise exceptions.ProgramError(e) try: value = script.run() except js_errors as e: raise exceptions.ProgramError(e) return self.convert(value)
def _compile(self, source): runner_source = self._runtime._runner_source replacements = { '#{source}': lambda: source, '#{encoded_source}': lambda: json.dumps( "(function(){ " + encode_unicode_codepoints(source) + " })()" ), '#{json2_source}': _json2._json2_source, } pattern = "|".join(re.escape(k) for k in replacements) runner_source = re.sub(pattern, lambda m: replacements[m.group(0)](), runner_source) return runner_source
def _eval(self, source): return self.exec_('return ' + encode_unicode_codepoints(source))