that fixes invocation:
>>> StringBuilder.length()
that was compiled to
>>> invokevirtual CharSequence.length()
and now compiles to
>>> invokevirtual StringBuilder.length()
Essentially patch rewrites FunctionDescriptor.containingDeclaration
when FunctionDescriptor is copied to subclass scope.
FunctionDescriptor now has kind field that can be
* DECLARATION (for "real" function, maybe abstract)
* DELEGATION
* FAKE_OVERRIDE (created for functions from supertypes)
All tests pass although some parts of code are buggy and ugly.
Random comments about this patch:
* FunctionDescriptor.overrides point to function descriptors of supertype scopes
* Filling of memberScope with supertypes is moved to OverrideResolver
* ExpressionCodegen.intermediateValueForProperty must be rewritten
* Patch adds not nice REDECLARATION reports (see compiler/testData/diagnostics/tests/*).
Will be fixed later.
Bug:
fun loop(var times : Int) {
while(times > 0) {
val u : (value : Int) -> Unit = { // This arrow is confusing the lookahead
System.out?.println(it)
}
u(times--)
}
}