Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't override eval method when inheriting JSClass #224

Closed
GoogleCodeExporter opened this issue Mar 15, 2015 · 2 comments
Closed

Can't override eval method when inheriting JSClass #224

GoogleCodeExporter opened this issue Mar 15, 2015 · 2 comments

Comments

@GoogleCodeExporter
Copy link

What steps will reproduce the problem?

The following is a modified version of the hello world script, located at 
http://code.google.com/p/pyv8/source/browse/trunk/demos/helloworld.py

  import PyV8

  class Global(PyV8.JSClass):
      def eval(self, arg):
          print 'eval', arg

  with PyV8.JSContext(Global()) as ctxt:
      ctxt.eval("eval('Hello World');")

What is the expected output? What do you see instead?

I expect to see "Hello World" as argument in the eval() function. Instead, I 
get a lexing/parser error. Which makes me believe the eval function is a 
keyword?!

What version of the product are you using? On what operating system?

PyV8 1.0, according to "PyV8.__version__"

Please provide any additional information below.

Not much more to it ;)

Original issue reported on code.google.com by jurriaan...@gmail.com on 21 Jan 2014 at 3:05

@GoogleCodeExporter
Copy link
Author

As you know, if you add a 'eval' method to the PyV8 global object, there will 
be a global function name eval; but if your name is same to the build-in 
functions, your name will be overwrite by default.

So, please use a different name and reassign it to the global namespace

class Global(PyV8.JSClass):
    def _eval(self, arg):
        print 'eval', arg

with PyV8.JSContext(Global()) as ctxt:
    ctxt.eval("eval = _eval; eval('Hello World');")

Original comment by flier...@gmail.com on 22 Jan 2014 at 8:30

  • Changed state: WontFix
  • Added labels: OpSys-All

@GoogleCodeExporter
Copy link
Author

Thanks for the workaround, flier. I can live with this. However, would it make 
sense to warn the user about this? As currently defining a handler for "eval", 
not "_eval", fails silently.

Excuse me if it's already there, but for me it'd be nice to get a log.warning() 
saying that my defined function, "eval", will be surpressed, and point to some 
documentation. (Or this issue for all I care.)
(To support this argument - I don't know all Javascript builtins by heart.)

Thanks for the quick reply.

Original comment by jurriaan...@gmail.com on 22 Jan 2014 at 11:05

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant