deinspanjer
deinspanjer

Reputation: 515

How to track down a ReferenceError in Nashorn

I have hit a problem that seems like it might be some sort of bug in the Nashorn engine, but I can't figure out a good way to distill a test case that will demonstrate it.

I have a block of code (that used to work!) which looks roughly like this:

'use strict';
function Dummy() {
  this.val = 'I am fubar';
  this.aContainer = [];
}
Dummy.prototype.toString = function() { return JSON.stringify(this);};

let obj = {};
obj.aMethod = function(arg) {
  let fubar = new Dummy();
  print('Okay so far');

  fubar.aContainer.push({"some":"thing"});
  print('Still okay');
  fubar.aContainer.push({"==": [{"var": "something_else"}, fubar.val]});

  return fubar;
};

print(obj.aMethod(null));

Unfortunately, running this example with jss --language=es6 -strict doesn't crash. In my real code though, I get the following:

jdk.nashorn.internal.runtime.ECMAException: ReferenceError: "fubar" is not defined

If I change the code as follows, it runs fine:

'use strict';
function Dummy() {
  this.val = 'I am fubar';
  this.aContainer = [];
}
Dummy.prototype.toString = function() { return JSON.stringify(this);};

let obj = {};
obj.aMethod = function(arg) {
  let fubar = new Dummy();
  print('Okay so far');

  fubar.aContainer.push({"some":"thing"});
  print('Still okay');
  let x = fubar.val;
  fubar.aContainer.push({"==": [{"var": "something_else"}, x]});

  return fubar;
};

print(obj.aMethod(null));

Is there anything I can do to try to instrument the real code further or otherwise track this issue down? The odd thing is the error happens very early in execution. If I put a print() call anywhere in the method, the print is never reached. The last line of my code in the callstack is actually the line that calls the method.

I did just pick up a new version of Java via auto-update, but I need to see if this code is running under it or not. My current version from the console is:

➜  ~ java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

Upvotes: 1

Views: 573

Answers (1)

Aris2World
Aris2World

Reputation: 1234

A full summary of all you can do to trace Nashorn is contained in this document:

jdk8u-dev/nashorn/file/tip/docs/DEVELOPER_README

It describes system properties that are used for internal debugging and instrumentation purposes, along with the system loggers, which are used for the same thing.

Upvotes: 1

Related Questions