Open
Description
Flutter contains the following pattern of super-calls:
class MultiChildRenderObjectElement extends RenderObjectElement {
@override
MultiChildRenderObjectWidget get widget => super.widget as MultiChildRenderObjectWidget;
}
abstract class RenderObjectElement extends Element {
@override
RenderObjectWidget get widget => super.widget as RenderObjectWidget;
}
abstract class Element extends DiagnosticableTree implements BuildContext {
@override
Widget get widget => _widget;
Widget _widget;
}
If the chain fully inlined we get the following graph:
v139 <- LoadField(v2 . _widget@246042623) T{Widget?}
AssertAssignable:14(v139 T{Widget?}, v125, ' in type cast', instantiator_type_args(v0), function_type_args(v0)) T{RenderObjectWidget?}
AssertAssignable:14(v139 T{RenderObjectWidget?}, v71, ' in type cast', instantiator_type_args(v0), function_type_args(v0))
Here the second assert assignable can "consume" the first one.
(@rakudrama brought my attention to these chains in dart-lang/language#1189)
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity