google / google/closure-compiler
Crash in compiler when trying to use externs to define CommonJS loaded React
- Dominant language
- JavaScript
- Stars
- 7.7k
- Forks
- 1.2k
- Avg merge
- 2d 12h
- Merged PRs (30d)
- 6
Description
```
java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please email js-compiler@google.com with this stack trace and repro steps (a CL# and a build target).
Unexpected variable Symbol
Node(NAME Symbol): [synthetic:2] :34:2
Symbol = $jscomp.global.Symbol || {};
Parent(ASSIGN): [synthetic:2] :34:2
Symbol = $jscomp.global.Symbol || {};
at com.google.javascript.jscomp.VarCheck.visit(VarCheck.java:202)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:607)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:601)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:601)
at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:650)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:595)
at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:641)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:593)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:601)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:601)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:601)
at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:601)
at com.google.javascript.jscomp.NodeTraversal.traverseRoots(NodeTraversal.java:318)
at com.google.javascript.jscomp.VarCheck.process(VarCheck.java:142)
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.optimize(Compiler.java:1912)
at com.google.javascript.jscomp.Compiler.compileInternal(Compiler.java:692)
```
Test case:
https://closure-compiler-debugger.appspot.com/#input0%3Dgoog.module(%2522test%2522)%253B%250A%250A%250Alet%2520React%2520%253D%2520%252F**%2520%2540type%2520%257BReact%257D%2520*%252F(require(%2522React%2522))%253B%250A%250Aclass%2520MyClass%2520extends%2520React.Component%2520%257B%250A%257D%250A%250Aexports%2520%253D%2520MyClass%253B%250A%26input1%26conformanceConfig%26externs%3D%252F**%250A%2520*%2520%2540type%2520%257BObject%257D%250A%2520*%2520%2540const%250A%2520*%252F%250Avar%2520React%2520%253D%2520%257B%257D%253B%250A%250A%252F**%250A*%2520%2540constructor%250A*%252F%250AReact.Component%2520%253D%2520function()%2520%257B%257D%253B%250A%250A%252F**%250A*%2520%2540param%2520%257Bstring%257D%2520module%250A*%2520%2540return%2520%257B*%257D%250A*%252F%250Avar%2520require%2520%253D%2520function(module)%2520%257B%2520return%2520%257B%257D%253B%2520%257D%253B%250A%26refasterjs-template%26CLOSURE_PASS%3D1%26LANG_IN_IS_ES6%3D1
Externs
``` javascript
/**
* @type {Object}
* @const
*/
var React = {};
/**
* @constructor
*/
React.Component = function() {};
/**
* @param {string} module
* @return {*}
*/
var require = function(module) { return {}; };
```
Code
``` javascript
goog.module("test");
let React = /** @type {React} */(require("React"));
class MyClass extends React.Component {
}
exports = MyClass;
```
See discussion:
https://groups.google.com/forum/#!topic/closure-compiler-discuss/-r7XK8j5yfA
When I run it locally I don't get this crash, instead I get:
```
WARNING - Misplaced type annotation. Type annotations are not allowed here. Are you missing parentheses?
```
Contributor guide
Assessment
This issue has not been assessed yet.