| Index: pkg/compiler/lib/src/ssa/builder.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
|
| index f51770f60413bffd869cf99c341ad3d60671c73c..059073f130008f27f8d5c1e4b5e6e9986c558455 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder.dart
|
| @@ -123,7 +123,7 @@ class SsaAstBuilder extends SsaAstBuilderBase {
|
|
|
| DiagnosticReporter get reporter => backend.reporter;
|
|
|
| - HGraph build(ElementCodegenWorkItem work, ClosedWorld closedWorld) {
|
| + HGraph build(covariant ElementCodegenWorkItem work, ClosedWorld closedWorld) {
|
| return task.measure(() {
|
| if (handleConstantField(work, closedWorld)) {
|
| // No code is generated for `work.element`.
|
| @@ -3322,7 +3322,7 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| bool needsSubstitutionForTypeVariableAccess(ClassElement cls) {
|
| if (closedWorld.isUsedAsMixin(cls)) return true;
|
|
|
| - return closedWorld.anyStrictSubclassOf(cls, (ClassElement subclass) {
|
| + return closedWorld.anyStrictSubclassOf(cls, (ClassEntity subclass) {
|
| return !rtiSubstitutions.isTrivialSubstitution(subclass, cls);
|
| });
|
| }
|
| @@ -3448,7 +3448,7 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| }
|
| }
|
| ResolutionInterfaceType type = elements.getType(node);
|
| - ResolutionInterfaceType expectedType =
|
| + ResolutionDartType expectedType =
|
| constructorDeclaration.computeEffectiveTargetType(type);
|
| expectedType = localsHandler.substInContext(expectedType);
|
|
|
| @@ -3606,11 +3606,15 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| bool definitelyFails = false;
|
|
|
| void addTypeVariableBoundCheck(
|
| - ResolutionInterfaceType instance,
|
| - ResolutionDartType typeArgument,
|
| - ResolutionTypeVariableType typeVariable,
|
| - ResolutionDartType bound) {
|
| + InterfaceType _instance,
|
| + DartType _typeArgument,
|
| + TypeVariableType _typeVariable,
|
| + DartType _bound) {
|
| if (definitelyFails) return;
|
| + ResolutionInterfaceType instance = _instance;
|
| + ResolutionDartType typeArgument = _typeArgument;
|
| + ResolutionTypeVariableType typeVariable = _typeVariable;
|
| + ResolutionDartType bound = _bound;
|
|
|
| int subtypeRelation = types.computeSubtypeRelation(typeArgument, bound);
|
| if (subtypeRelation == DartTypes.IS_SUBTYPE) return;
|
| @@ -4387,7 +4391,7 @@ class SsaAstGraphBuilder extends ast.Visitor
|
|
|
| @override
|
| void visitSuperMethodSet(
|
| - ast.Send node, MethodElement method, ast.Node rhs, _) {
|
| + ast.SendSet node, MethodElement method, ast.Node rhs, _) {
|
| handleSuperSendSet(node);
|
| }
|
|
|
| @@ -4398,8 +4402,8 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| }
|
|
|
| @override
|
| - void visitUnresolvedSuperIndexSet(
|
| - ast.Send node, Element element, ast.Node index, ast.Node rhs, _) {
|
| + void visitUnresolvedSuperIndexSet(ast.SendSet node, ErroneousElement element,
|
| + ast.Node index, ast.Node rhs, _) {
|
| handleSuperSendSet(node);
|
| }
|
|
|
| @@ -4426,20 +4430,20 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| }
|
|
|
| @override
|
| - void visitUnresolvedSuperGetterIndexPrefix(ast.Send node, Element element,
|
| + void visitUnresolvedSuperGetterIndexPrefix(ast.SendSet node, Element element,
|
| MethodElement setter, ast.Node index, IncDecOperator operator, _) {
|
| handleSuperSendSet(node);
|
| }
|
|
|
| @override
|
| - void visitUnresolvedSuperGetterIndexPostfix(ast.Send node, Element element,
|
| + void visitUnresolvedSuperGetterIndexPostfix(ast.SendSet node, Element element,
|
| MethodElement setter, ast.Node index, IncDecOperator operator, _) {
|
| handleSuperSendSet(node);
|
| }
|
|
|
| @override
|
| void visitUnresolvedSuperSetterIndexPrefix(
|
| - ast.Send node,
|
| + ast.SendSet node,
|
| MethodElement indexFunction,
|
| Element element,
|
| ast.Node index,
|
| @@ -4450,7 +4454,7 @@ class SsaAstGraphBuilder extends ast.Visitor
|
|
|
| @override
|
| void visitUnresolvedSuperSetterIndexPostfix(
|
| - ast.Send node,
|
| + ast.SendSet node,
|
| MethodElement indexFunction,
|
| Element element,
|
| ast.Node index,
|
| @@ -4485,7 +4489,7 @@ class SsaAstGraphBuilder extends ast.Visitor
|
|
|
| @override
|
| void visitUnresolvedSuperGetterCompoundIndexSet(
|
| - ast.Send node,
|
| + ast.SendSet node,
|
| Element element,
|
| MethodElement setter,
|
| ast.Node index,
|
| @@ -4497,7 +4501,7 @@ class SsaAstGraphBuilder extends ast.Visitor
|
|
|
| @override
|
| void visitUnresolvedSuperSetterCompoundIndexSet(
|
| - ast.Send node,
|
| + ast.SendSet node,
|
| MethodElement getter,
|
| Element element,
|
| ast.Node index,
|
| @@ -4508,7 +4512,7 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| }
|
|
|
| @override
|
| - void visitUnresolvedSuperCompoundIndexSet(ast.Send node, Element element,
|
| + void visitUnresolvedSuperCompoundIndexSet(ast.SendSet node, Element element,
|
| ast.Node index, AssignmentOperator operator, ast.Node rhs, _) {
|
| handleSuperSendSet(node);
|
| }
|
| @@ -4533,13 +4537,13 @@ class SsaAstGraphBuilder extends ast.Visitor
|
|
|
| @override
|
| void visitUnresolvedSuperPrefix(
|
| - ast.Send node, Element element, IncDecOperator operator, _) {
|
| + ast.SendSet node, Element element, IncDecOperator operator, _) {
|
| handleSuperSendSet(node);
|
| }
|
|
|
| @override
|
| void visitUnresolvedSuperPostfix(
|
| - ast.Send node, Element element, IncDecOperator operator, _) {
|
| + ast.SendSet node, Element element, IncDecOperator operator, _) {
|
| handleSuperSendSet(node);
|
| }
|
|
|
| @@ -4574,19 +4578,19 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| }
|
|
|
| @override
|
| - void visitSuperMethodCompound(ast.Send node, FunctionElement method,
|
| + void visitSuperMethodCompound(ast.Send node, MethodElement method,
|
| AssignmentOperator operator, ast.Node rhs, _) {
|
| handleSuperSendSet(node);
|
| }
|
|
|
| @override
|
| - void visitUnresolvedSuperGetterCompound(ast.Send node, Element element,
|
| - MethodElement setter, AssignmentOperator operator, ast.Node rhs, _) {
|
| + void visitUnresolvedSuperGetterCompound(ast.SendSet node, Element element,
|
| + SetterElement setter, AssignmentOperator operator, ast.Node rhs, _) {
|
| handleSuperSendSet(node);
|
| }
|
|
|
| @override
|
| - void visitUnresolvedSuperSetterCompound(ast.Send node, MethodElement getter,
|
| + void visitUnresolvedSuperSetterCompound(ast.Send node, GetterElement getter,
|
| Element element, AssignmentOperator operator, ast.Node rhs, _) {
|
| handleSuperSendSet(node);
|
| }
|
| @@ -5180,12 +5184,14 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| ClassElement targetClass = targetConstructor.enclosingClass;
|
| if (rtiNeed.classNeedsRti(targetClass)) {
|
| ClassElement cls = redirectingConstructor.enclosingClass;
|
| - ResolutionInterfaceType targetType =
|
| + ResolutionDartType targetType =
|
| redirectingConstructor.computeEffectiveTargetType(cls.thisType);
|
| targetType = localsHandler.substInContext(targetType);
|
| - targetType.typeArguments.forEach((ResolutionDartType argument) {
|
| - inputs.add(typeBuilder.analyzeTypeArgument(argument, sourceElement));
|
| - });
|
| + if (targetType is ResolutionInterfaceType) {
|
| + targetType.typeArguments.forEach((ResolutionDartType argument) {
|
| + inputs.add(typeBuilder.analyzeTypeArgument(argument, sourceElement));
|
| + });
|
| + }
|
| }
|
| pushInvokeStatic(node, targetConstructor.declaration, inputs);
|
| HInstruction value = pop();
|
| @@ -5750,14 +5756,14 @@ class SsaAstGraphBuilder extends ast.Visitor
|
| listConstructor = constructorElement.effectiveTarget;
|
|
|
| ResolutionInterfaceType type = elements.getType(node);
|
| - ResolutionInterfaceType expectedType =
|
| + ResolutionDartType expectedType =
|
| constructorElement.computeEffectiveTargetType(type);
|
| expectedType = localsHandler.substInContext(expectedType);
|
|
|
| ClassElement cls = listConstructor.enclosingClass;
|
|
|
| MethodElement createFunction = listConstructor;
|
| - if (rtiNeed.classNeedsRti(cls)) {
|
| + if (expectedType is ResolutionInterfaceType && rtiNeed.classNeedsRti(cls)) {
|
| List<HInstruction> typeInputs = <HInstruction>[];
|
| expectedType.typeArguments.forEach((ResolutionDartType argument) {
|
| typeInputs
|
|
|