ravipudi / pyv8

Automatically exported from code.google.com/p/pyv8
https://code.google.com/p/pyv8/
0 stars 0 forks source link

Can't override eval method when inheriting JSClass #224

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
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 commented 9 years ago
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

GoogleCodeExporter commented 9 years ago
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