Hi,

Sorry for the delayed response.

Thanks for the test program. Yes, I confirm that this is a bug. I ported your Scala program to java and filed an issue:

https://bugs.openjdk.java.net/browse/JDK-8081609

Thanks,
-Sundar

On Tuesday 19 May 2015 07:06 PM, Dima Golubets wrote:
Sure,

Here is the code (I have attached zipped sources too).


object Program extends App {
   val factory = new NashornScriptEngineFactory
   val engine = factory.getScriptEngine

   val globalBindings = engine.createBindings()
   val engineBindings = engine.getBindings(ScriptContext.ENGINE_SCOPE)

   val context = new SimpleScriptContext()
   context.setBindings(globalBindings, ScriptContext.GLOBAL_SCOPE)
   context.setBindings(engineBindings, ScriptContext.ENGINE_SCOPE)

   engineBindings.put("program", this)
   globalBindings.put("text", "initial text")

   engine.eval(
     """
       |print(text);
       |program.someMethod();
       |print(text);
       |
     """.stripMargin, context)

   /* I would expect the following text output:
         initial text
         another text
         initial text

       However I get:
         initial text
         another text
         another text
    */

   def someMethod() = {

     val globalBindings = engine.createBindings()

     // a context with a new global bindings, same engine bindings
     val context = new SimpleScriptContext()
     context.setBindings(globalBindings, ScriptContext.GLOBAL_SCOPE)
     context.setBindings(engineBindings, ScriptContext.ENGINE_SCOPE)

     globalBindings.put("text", "another text")

     engine.eval("print(text)", context)

   }
}


On Tue, May 19, 2015 at 2:58 PM A. Sundararajan <
[email protected]> wrote:

Will you please post simple test program demonstrating the problem
you're facing?

-Sundar

Dima Golubets wrote:
Hi!

I call engine.eval, which calls some Java code which in turn calls eval
again, but with another script context. However this new script context
gets up the call stack somehow and the rest of the javascript code
continues to execute with variables defined in that another context.

Is it a bug, or eval inside eval is not supported?



Reply via email to