JDK-8057010 : Object type is wrong for unit test
  • Type: Bug
  • Component: core-libs
  • Sub-Component: jdk.nashorn
  • Affected Version: 9
  • Priority: P4
  • Status: Closed
  • Resolution: Fixed
  • Submitted: 2014-09-01
  • Updated: 2014-12-16
  • Resolved: 2014-09-02
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9Fixed
Related Reports
Duplicate :  
Description
Both rhino and v8 say that a.x=number, but we say it's object for apply_to_call/apply_to_call4.js

print("start");

var x = {
    a : 0,
    b : 0,
    c : 0,
    initialize : function(x,y,z) {
    this.a = x;
    this.b = y;
    this.c = z;
    }
};

function f(x) {
    print("this is a black hole - arguments escape");
}

function test() {
    f(arguments);
    x.initialize.apply(x, arguments);
}

test(4711,23,17);
print(x.a);
print(x.b);
print(x.c);

function test2() {
    arguments[0] = 17;
    x.initialize.apply(x, arguments);
}

test2(1,2,3);
print(x.a);
print(x.b);
print(x.c);

function test3() {
    var escape = arguments[0];
    f(escape);
    x.initialize.apply(x, arguments);
}

test3("alpha", "beta", "gamma");
print(x.a);
print(x.b);
print(x.c);

function test4() {
    var escape = arguments.length;
    f(escape);
    x.initialize.apply(x, arguments);
}

test4(1.2, 2.3, 3.4);
print(x.a);
print(x.b);
print(x.c);

function test5() {
    x.initialize.apply(x, arguments, 17);
}

print("test 5 done");
test5(11, 22);
print("a="+typeof(x.a));
print(x.b);
print(x.c);

print("Now it's time for transforms");

function test6() {
    x.initialize.apply(x, arguments);
}

test6(19, 20, 21);
print(x.a);
print(x.b);
print(x.c);

function test7() {
    x.initialize.apply(x, arguments);
}

test7(1, 2.2, 17, 18);
print(x.a);
print(x.b);
print(x.c);

print("Should have transformed");

function test8() {
    var apply = f;
    x.initialize.apply(x, arguments);
}

test8(7,8,9);
print(x.a);
print(x.b);
print(x.c);

Comments
This has to do with us packing the wrong arguments for the apply if there are extra arguments on the line. I have no idea why. This reproduces print("start"); var x = { a : 0, b : 0, c : 0, initialize : function(x,y,z) { print("x="+x+" y="+y+" z="+z); this.a = x; this.b = y; this.c = z; } }; function f(x) { print("this is a black hole - arguments escape"); } function test5() { x.initialize.apply(x, arguments, 17); } print("test 5 done"); test5(11, 22); print("a="+typeof(x.a)); and writes out Object array (args), 17 and undefined as arguments in the initializer.
01-09-2014