MiniRacer.execute failure
Steps to reproduce
Python 3.10.1 (tags/v3.10.1:2cd268a, Dec 6 2021, 19:10:37) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from py_mini_racer import MiniRacer
>>> ctx = MiniRacer()
>>> ctx.eval('var a = 1')
>>>
>>> ctx.execute('var b = 1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "M:\site-packages\py_mini_racer\py_mini_racer.py", line 235, in execute
ret = self.eval(wrapped_expr, timeout=timeout, max_memory=max_memory)
File "M:\site-packages\py_mini_racer\py_mini_racer.py", line 221, in eval
return MiniRacerValue(self, res).to_python()
File "M:\site-packages\py_mini_racer\py_mini_racer.py", line 403, in to_python
self._raise_from_error()
File "M:\site-packages\py_mini_racer\py_mini_racer.py", line 391, in _raise_from_error
raise JSParseException(msg)
py_mini_racer.py_mini_racer.JSParseException: b'Unknown JavaScript error during parse'
>>>
>>> ctx.eval('''
... function foo() {
... return 1
... }
... foo()''')
1
>>>
>>> ctx.execute('''
... function bar() {
... return 1
... }
... bar()''')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "M:\site-packages\py_mini_racer\py_mini_racer.py", line 235, in execute
ret = self.eval(wrapped_expr, timeout=timeout, max_memory=max_memory)
File "M:\site-packages\py_mini_racer\py_mini_racer.py", line 221, in eval
return MiniRacerValue(self, res).to_python()
File "M:\site-packages\py_mini_racer\py_mini_racer.py", line 403, in to_python
self._raise_from_error()
File "M:\site-packages\py_mini_racer\py_mini_racer.py", line 391, in _raise_from_error
raise JSParseException(msg)
py_mini_racer.py_mini_racer.JSParseException: b'Unknown JavaScript error during parse'
>>>
Expected behavior
All expressions can be evaluated via MiniRacer.execute as same as MiniRacer.eval.
Actual behavior
Some expressions can not be evaluated via MiniRacer.execute.
System configuration
PyMiniRacer version: 0.6.0 win_amd64
Python version: 3.10.1
I had tried use eval to instead of function in source code of MiniRacer.execute, it works. But new issue occurred, the scope has been limited.
Hmm... is there it possible to add a function likes res = ext.mr_json_stringify(ctx, res), intead of the wrapped expression string?
I have used esprima to avoid this issue. https://github.com/SeaHOH/jsengine/commit/5ebe633bc09bb5adb7b391778111b37978abc351