Skip to content

Instantly share code, notes, and snippets.

@teppeis
Last active August 29, 2015 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save teppeis/dac50aa483b5a3b61599 to your computer and use it in GitHub Desktop.
Save teppeis/dac50aa483b5a3b61599 to your computer and use it in GitHub Desktop.
Closure Compiler failure list for es6-table

based on v20141023 result

arrow functions: no line break between params and =>

input

module.exports = function() {
    var f = x
        => 2;
    return f();
};

generated

module.exports = function() {
  return 2;
};

expected: should be compile error

arrow functions: no "prototype" and "name" properties

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

const: temporal dead zone

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

const: temporal dead zone (strict mode)

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"

let: 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"

let: temporal dead zone (strict mode)

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"

default function parameters: temporal dead zone1

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

spread (...) operator: with strings, in function calls

input

module.exports = function() {

       return Math.max(..."1234") === 4;
      
};

generated

module.exports = function() {
  return 4 === Math.max.apply(Math, [].concat("1234"));
};

spread (...) operator: with strings, in array literals

input

module.exports = function() {

       return ["a", ..."bcd", "e"][3] === "d";
    
};

generated

module.exports = function() {
  return "d" === [].concat(["a"], "bcd", ["e"])[3];
};

super

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment