Skip to content

Implement ES6 transpilation of super.getter calls #1089

Closed
@ochafik

Description

@ochafik

Calls to super getters aren't supported yet.

class Foo {
  get x() { return 'Foo'; }
}
class Bar extends Foo {
  get x() { return super.x; }
}
console.log(new Foo().x);
console.log(new Bar().x);

Current error:

ERROR - ES6 transpilation of 'Only calls to super or to a method of super are supported.' is not yet implemented.
  get x() { return super.x; }
                   ^

This is needed to compile DDC's output with Closure.

Activity

ochafik

ochafik commented on Sep 12, 2015

@ochafik
Author

Hey guys, I had a look at how to work around this issue and came up with #1133. Please let me know what you think :-)

bitbay

bitbay commented on Mar 2, 2016

@bitbay

It is still an issue using --language_in ECMASCRIPT6 with --language_out ES5_STRICT.

Closure Compiler (http://github.com/google/closure-compiler)
Version: v20160208
Built on: 2016/02/08 16:23

My workaround using

class Foo {
  set x(value) { this._x = value; }
  setX(value) { this.x = value }
}
class Bar extends Foo {
  set x(value) { super.setX(value); }
}

throws an error:

$ java -jar compiler.jar --language_in ECMASCRIPT6 --language_out ES5_STRICT --compilation_level ADVANCED_OPTIMIZATIONS --js test.js
java.lang.RuntimeException: INTERNAL COMPILER ERROR.                                             
Please report this problem.                                                                      

null                                                                                             
  Node(SUPER): test.js:6:17                                                                      
  set x(value) { super.setX(value); }                                                            
  Parent(GETPROP): test.js:6:17                                                                  
  set x(value) { super.setX(value); }                                                            

        at com.google.javascript.jscomp.Es6ConvertSuper.visitSuper(Es6ConvertSuper.java:137)     
        at com.google.javascript.jscomp.Es6ConvertSuper.visit(Es6ConvertSuper.java:70)           
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:621)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:615)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:615)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:615)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBlockScope(NodeTraversal.java:664) 
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:609)     
        at com.google.javascript.jscomp.NodeTraversal.traverseFunction(NodeTraversal.java:655)   
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:607)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:615)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:615)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:615)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:615)     
        at com.google.javascript.jscomp.NodeTraversal.traverseBranch(NodeTraversal.java:615)     
        at com.google.javascript.jscomp.NodeTraversal.traverse(NodeTraversal.java:297)           
        at com.google.javascript.jscomp.NodeTraversal.traverseEs6(NodeTraversal.java:564)        
        at com.google.javascript.jscomp.Es6ConvertSuper.process(Es6ConvertSuper.java:191)        
        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:771)                        
        at com.google.javascript.jscomp.Compiler.compileInternal(Compiler.java:687)              
        at com.google.javascript.jscomp.Compiler.access$000(Compiler.java:83)                    
        at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:645)                       
        at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:642)                       
        at com.google.javascript.jscomp.CompilerExecutor$2.call(CompilerExecutor.java:93)        
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)                    
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)                              
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)       
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)       
        at java.lang.Thread.run(Thread.java:722)                                                 
Caused by: java.lang.NullPointerException                                                        
        ... 31 more                                                                              
ChadKillingsworth

ChadKillingsworth commented on Sep 15, 2017

@ChadKillingsworth
Collaborator

this was fixed a while ago.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @ochafik@concavelenz@ChadKillingsworth@bitbay

      Issue actions

        Implement ES6 transpilation of super.getter calls · Issue #1089 · google/closure-compiler