Is inheritance supported?
Opened this issue · 2 comments
masuhar commented
With this code
class C { }
class D extends C {
constructor() {}
}
var v = new D()
I get an error Error?: |this| used uninitialized in D class constructor
It reminds me a restriction in Java, where you should write a call to the super-constructor at the beginning of a constructor. You are also not safe to access fields of this
before finishing the call to the super-constructor.
masuhar commented
The cause of the problem:
- in JS, it seems that a constructor of a subclass must call
super()
before usingthis
. - Kanon inserts checkpoints inside of a constructor that uses
this
. - Hence the error.
But changing the class D to this won't help:
class D extends C {
constructor(){ super(); }
}
Though this is a correct program, Kanon inserts checkpoints before super()
, which violates the use of thiis
before super()
.
masuhar commented
Conclusion: we should fix the instrumentation algorithm to properly treat super
calls.