based on v20141023 result
input
module.exports = function() {
var f = x
=> 2;
return f();
};
generated
module.exports = function() {
return 2;
};
expected: should be compile error
input
module.exports = function() {
var a = () => 5;
return !a.hasOwnProperty("prototype") && a.name === "";
};
generated
module.exports = function() {
var a = function() {
return 5;
};
return!a.hasOwnProperty("prototype") && "" === a.name;
};
expected: arrow functions should have no "prototype" and "name" properties
input
module.exports = function() {
var passed = (function(){ try { qux; } catch(e) { return true; }}());
const qux = 456;
return passed;
};
generated
module.exports = function() {
var a;
a: {
try {
456;
} catch (b) {
a = !0;
break a;
}
a = void 0;
}
return a;
};
compile log
WARNING - Suspicious code. This code lacks side-effects. Is there a bug?
var passed = (function(){ try { qux; } catch(e) { return true; }}());
^
0 error(s), 1 warning(s)
actual: generated code returns undefined
expected: should catch an error and return true
input
module.exports = function() {
'use strict';
var passed = (function(){ try { qux; } catch(e) { return true; }}());
const qux = 456;
return passed;
};
same as "const: temporal dead zone"
input
module.exports = function() {
var passed = (function(){ try { qux; } catch(e) { return true; }}());
let qux = 456;
return passed;
};
same as "const: temporal dead zone"
input
module.exports = function() {
'use strict';
var passed = (function(){ try { qux; } catch(e) { return true; }}());
let qux = 456;
return passed;
};
same as "const: temporal dead zone"
input 1
module.exports = function() {
(function(a=a){}());
return false;
};
generated 1
module.exports = function() {
return!1;
};
input 2
module.exports = function() {
(function(a=b,b){}());
return false;
};
generated 2
module.exports = function() {
return!1;
};
input 3
module.exports = function() {
(function(a=function(){ return b; }){ var b = 1;}());
return false;
};
generated 3
module.exports = function() {
return!1;
};
expected: all should be error
input
module.exports = function() {
return Math.max(..."1234") === 4;
};
generated
module.exports = function() {
return 4 === Math.max.apply(Math, [].concat("1234"));
};
input
module.exports = function() {
return ["a", ..."bcd", "e"][3] === "d";
};
generated
module.exports = function() {
return "d" === [].concat(["a"], "bcd", ["e"])[3];
};
input
module.exports = function() {
var passed = true;
var B = class extends class {
constructor(a) { return this.id + a; }
foo(a) { return a + this.id; }
} {
constructor(a) {
this.id = 'AB';
// "super" in the constructor calls
// the superclass's constructor on "this".
passed &= super(a) === 'ABCD';
// "super" can be also used to call
// superclass methods on "this".
passed &= super.foo(a) === 'CDAB';
}
foo(a) {
passed &= super.foo(a) === 'YZEF';
}
}
var b = new B("CD");
// "super" is bound statically, even though "this" isn't
var obj = { foo: b.foo, id:"EF" };
obj.foo("YZ");
return passed;
};
compile log
ERROR - The super keyword may only appear in classes with an extends clause.
var B = class extends class {
^
1 error(s), 0 warning(s)
java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.
INTERNAL COMPILER ERROR.
Please report this problem.
null
Node(ASSIGN): ./build/42/in.js:10:8
this.id = 'AB';
Parent(EXPR_RESULT): ./build/42/in.js:10:8
this.id = 'AB';
Node(CLASS): ./build/42/in.js:5:26
var B = class extends class {
Parent(CLASS): ./build/42/in.js:5:12
var B = class extends class {
at com.google.javascript.jscomp.Es6ToEs3Converter$CheckClassAssignments.visit(Es6ToEs3Converter.java:1096)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:587)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:630)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:575)
at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:621)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:572)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:630)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:575)
at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:621)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:572)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:289)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:538)
at com.google.javascript.jscomp.Es6ToEs3Converter.checkClassReassignment(Es6ToEs3Converter.java:470)
at com.google.javascript.jscomp.Es6ToEs3Converter.visitClass(Es6ToEs3Converter.java:742)
at com.google.javascript.jscomp.Es6ToEs3Converter.visit(Es6ToEs3Converter.java:165)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:587)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:630)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:575)
at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:621)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:572)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:581)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:289)
at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:538)
at com.google.javascript.jscomp.Es6ToEs3Converter.process(Es6ToEs3Converter.java:90)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:285)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:217)
at com.google.javascript.jscomp.Compiler.check(Compiler.java:849)
at com.google.javascript.jscomp.Compiler.compileInternal(Compiler.java:762)
at com.google.javascript.jscomp.Compiler.access$000(Compiler.java:93)
at com.google.javascript.jscomp.Compiler$3.call(Compiler.java:655)
at com.google.javascript.jscomp.Compiler$3.call(Compiler.java:652)
at com.google.javascript.jscomp.Compiler$4.call(Compiler.java:699)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.
null
Node(ASSIGN): ./build/42/in.js:10:8
this.id = 'AB';
Parent(EXPR_RESULT): ./build/42/in.js:10:8
this.id = 'AB';
... 48 more
Caused by: java.lang.NullPointerException
... 48 more