Not all locals live in the scope object. If you look at the code Nashorn 
emits[*] you will see that Nashorn strives to use JVM bytecode local variables 
whenever it can. Only function local variables that need to be visible in a 
nested lexical context (e.g. nested function) will be pushed into the scope 
object.

Attila.

--
[*]  Use the --print-code command line switch to jjs. Programmatically, use 
"-Dnashorn.args=--print-code" or use NashornScriptEngineFactory explicitly and 
invoke its getScriptEngine(String...) method to pass command line arguments.

On Sep 30, 2014, at 10:36 AM, Kuperman Sergey <[email protected]> wrote:

> Kuperman Sergey <seastranger@...> writes:
> 
>> 
>> Hello ! I am not sure it is the right place to ask but i will try anyway )
>> My team is trying to develop a JS debugger poc running Nashorn , and we
>> encountered an issue when trying to implement evaluation in function context:
>> We run some JS function with:
>>        ScriptEngineManager sem = new ScriptEngineManager();
>>        ScriptEngine engine = sem.getEngineByName("nashorn");
>>        engine.eval("load (\"src/com/sap/rdl/runjs/file.js\");");
>> in another app we set a breakpoint in a function, and try to invoke eval()
>> function from DebuggerSupport.java , while passing to it :scope variable we
>> received from the relevant frame's visibleVariables (JDI).
>> eval succeeds when global or upper scope defined variables are involved, but
>> if i use an expression with local function variable, i receive ECMAException
>> no such variable defined.. it seems to me that eval needs local vars to be
>> defined within the scope but they are not ..
>> Is there anything i could do to make it work ?
>> 
>> Thanks in advance
>> 
>> Sergey
>> SAP RDL development team
>> 
>> 
> 
> A little further investigation shows, that nashorn :scope loads variables
> lazily - only when needed or if eval function is used inside js.
> Is there a way to force :scope to contain all vars regardless of use ? I
> mean except using dummy eval statement that would be an ugly workaround..
> thanks in advance
> Sergey
> 
> 

Reply via email to