| Index: pkg/compiler/lib/src/resolution/members.dart
|
| diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
|
| index f8742591e2afffb75565fef0c5385445bb24d29f..307240b98966eaf09b7f6e80dda841c46b0976aa 100644
|
| --- a/pkg/compiler/lib/src/resolution/members.dart
|
| +++ b/pkg/compiler/lib/src/resolution/members.dart
|
| @@ -257,8 +257,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| /// not already `ConstantState.CONSTANT_INITIALIZER`.
|
| ResolutionResult visitInConstantContext(Node node) {
|
| ResolutionResult result = inConstantContext(() => visit(node));
|
| - assert(invariant(node, result != null,
|
| - message: "No resolution result for $node."));
|
| + assert(result != null, failedAt(node, "No resolution result for $node."));
|
|
|
| return result;
|
| }
|
| @@ -284,8 +283,11 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| ///
|
| /// The [ErroneousElement] corresponding to the message is returned.
|
| ErroneousElement reportCannotResolve(Node node, String name) {
|
| - assert(invariant(node, !inInstanceContext,
|
| - message: "ResolverVisitor.reportCannotResolve must not be called in "
|
| + assert(
|
| + !inInstanceContext,
|
| + failedAt(
|
| + node,
|
| + "ResolverVisitor.reportCannotResolve must not be called in "
|
| "instance context."));
|
|
|
| // We report an error within initializers because `this` is implicitly
|
| @@ -786,8 +788,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| return new StaticAccess.superField(target);
|
| }
|
| } else {
|
| - assert(invariant(node, target.isFunction,
|
| - message: "Unexpected super target '$target'."));
|
| + assert(target.isFunction,
|
| + failedAt(node, "Unexpected super target '$target'."));
|
| return new StaticAccess.superMethod(target);
|
| }
|
| }
|
| @@ -801,20 +803,22 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| if (setter.isMalformed) {
|
| return new StaticAccess.unresolvedSuper(getter);
|
| } else if (setter.isFunction) {
|
| - assert(invariant(node, setter.name == '[]=',
|
| - message: "Unexpected super setter '$setter'."));
|
| + assert(setter.name == '[]=',
|
| + failedAt(node, "Unexpected super setter '$setter'."));
|
| return new CompoundAccessSemantics(
|
| CompoundAccessKind.UNRESOLVED_SUPER_GETTER, getter, setter);
|
| } else {
|
| - assert(invariant(node, setter.isSetter,
|
| - message: "Unexpected super setter '$setter'."));
|
| + assert(setter.isSetter,
|
| + failedAt(node, "Unexpected super setter '$setter'."));
|
| return new CompoundAccessSemantics(
|
| CompoundAccessKind.UNRESOLVED_SUPER_GETTER, getter, setter);
|
| }
|
| } else if (getter.isField) {
|
| if (setter.isMalformed) {
|
| - assert(invariant(node, getter.isFinal,
|
| - message: "Unexpected super setter '$setter' for getter '$getter."));
|
| + assert(
|
| + getter.isFinal,
|
| + failedAt(node,
|
| + "Unexpected super setter '$setter' for getter '$getter."));
|
| return new StaticAccess.superFinalField(getter);
|
| } else if (setter.isField) {
|
| if (getter == setter) {
|
| @@ -827,8 +831,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // Either the field is accessible directly, or a setter shadows the
|
| // setter access. If there was another instance member it would shadow
|
| // the field.
|
| - assert(invariant(node, setter.isSetter,
|
| - message: "Unexpected super setter '$setter'."));
|
| + assert(setter.isSetter,
|
| + failedAt(node, "Unexpected super setter '$setter'."));
|
| return new CompoundAccessSemantics(
|
| CompoundAccessKind.SUPER_FIELD_SETTER, getter, setter);
|
| }
|
| @@ -840,14 +844,14 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| return new CompoundAccessSemantics(
|
| CompoundAccessKind.SUPER_GETTER_FIELD, getter, setter);
|
| } else {
|
| - assert(invariant(node, setter.isSetter,
|
| - message: "Unexpected super setter '$setter'."));
|
| + assert(setter.isSetter,
|
| + failedAt(node, "Unexpected super setter '$setter'."));
|
| return new CompoundAccessSemantics(
|
| CompoundAccessKind.SUPER_GETTER_SETTER, getter, setter);
|
| }
|
| } else {
|
| - assert(invariant(node, getter.isFunction,
|
| - message: "Unexpected super getter '$getter'."));
|
| + assert(getter.isFunction,
|
| + failedAt(node, "Unexpected super getter '$getter'."));
|
| if (setter.isMalformed) {
|
| if (isIndex) {
|
| return new CompoundAccessSemantics(
|
| @@ -856,15 +860,15 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| return new StaticAccess.superMethod(getter);
|
| }
|
| } else if (setter.isFunction) {
|
| - assert(invariant(node, setter.name == '[]=',
|
| - message: "Unexpected super setter '$setter'."));
|
| - assert(invariant(node, getter.name == '[]',
|
| - message: "Unexpected super getter '$getter'."));
|
| + assert(setter.name == '[]=',
|
| + failedAt(node, "Unexpected super setter '$setter'."));
|
| + assert(getter.name == '[]',
|
| + failedAt(node, "Unexpected super getter '$getter'."));
|
| return new CompoundAccessSemantics(
|
| CompoundAccessKind.SUPER_GETTER_SETTER, getter, setter);
|
| } else {
|
| - assert(invariant(node, setter.isSetter,
|
| - message: "Unexpected super setter '$setter'."));
|
| + assert(setter.isSetter,
|
| + failedAt(node, "Unexpected super setter '$setter'."));
|
| return new CompoundAccessSemantics(
|
| CompoundAccessKind.SUPER_METHOD_SETTER, getter, setter);
|
| }
|
| @@ -889,8 +893,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| return new StaticAccess.localVariable(target);
|
| }
|
| } else {
|
| - assert(invariant(node, target.isFunction,
|
| - message: "Unexpected local target '$target'."));
|
| + assert(target.isFunction,
|
| + failedAt(node, "Unexpected local target '$target'."));
|
| return new StaticAccess.localFunction(target);
|
| }
|
| }
|
| @@ -916,13 +920,13 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| return new StaticAccess.staticField(target);
|
| }
|
| } else {
|
| - assert(invariant(node, target.isFunction,
|
| - message: "Unexpected static target '$target'."));
|
| + assert(target.isFunction,
|
| + failedAt(node, "Unexpected static target '$target'."));
|
| return new StaticAccess.staticMethod(target);
|
| }
|
| } else {
|
| - assert(invariant(node, target.isTopLevel,
|
| - message: "Unexpected statically resolved target '$target'."));
|
| + assert(target.isTopLevel,
|
| + failedAt(node, "Unexpected statically resolved target '$target'."));
|
| if (target.isGetter) {
|
| return new StaticAccess.topLevelGetter(target);
|
| } else if (target.isSetter) {
|
| @@ -934,8 +938,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| return new StaticAccess.topLevelField(target);
|
| }
|
| } else {
|
| - assert(invariant(node, target.isFunction,
|
| - message: "Unexpected top level target '$target'."));
|
| + assert(target.isFunction,
|
| + failedAt(node, "Unexpected top level target '$target'."));
|
| return new StaticAccess.topLevelMethod(target);
|
| }
|
| }
|
| @@ -1232,7 +1236,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
|
|
| /// Handle a not expression, like `!a`.
|
| ResolutionResult handleNot(Send node, UnaryOperator operator) {
|
| - assert(invariant(node, operator.kind == UnaryOperatorKind.NOT));
|
| + assert(operator.kind == UnaryOperatorKind.NOT, failedAt(node));
|
|
|
| Node expression = node.receiver;
|
| ResolutionResult result = visitExpression(expression);
|
| @@ -1491,8 +1495,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
|
|
| /// Handle an invocation of an expression, like `(){}()` or `(foo)()`.
|
| ResolutionResult handleExpressionInvoke(Send node) {
|
| - assert(
|
| - invariant(node, node.isCall, message: "Unexpected expression: $node"));
|
| + assert(node.isCall, failedAt(node, "Unexpected expression: $node"));
|
| Node expression = node.selector;
|
| visitExpression(expression);
|
| CallStructure callStructure =
|
| @@ -1662,8 +1665,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| return handleNot(node, operator);
|
| case UnaryOperatorKind.COMPLEMENT:
|
| case UnaryOperatorKind.NEGATE:
|
| - assert(invariant(node, operator.isUserDefinable,
|
| - message: "Unexpected unary operator '${operator}'."));
|
| + assert(operator.isUserDefinable,
|
| + failedAt(node, "Unexpected unary operator '${operator}'."));
|
| return handleUserDefinableUnary(node, operator);
|
| }
|
| }
|
| @@ -2146,11 +2149,11 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| /// Compute a [DeferredPrefixStructure] for [node].
|
| ResolutionResult handleDeferredAccess(
|
| Send node, PrefixElement prefix, ResolutionResult result) {
|
| - assert(invariant(node, prefix.isDeferred,
|
| - message: "Prefix $prefix is not deferred."));
|
| + assert(
|
| + prefix.isDeferred, failedAt(node, "Prefix $prefix is not deferred."));
|
| SendStructure sendStructure = registry.getSendStructure(node);
|
| - assert(invariant(node, sendStructure != null,
|
| - message: "No SendStructure for $node."));
|
| + assert(
|
| + sendStructure != null, failedAt(node, "No SendStructure for $node."));
|
| registry.registerSendStructure(
|
| node, new DeferredPrefixStructure(prefix, sendStructure));
|
| if (result.isConstant) {
|
| @@ -2297,7 +2300,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| registry.registerDynamicUse(new DynamicUse(selector, null));
|
| sendStructure = new InvokeStructure(semantics, selector);
|
| } else {
|
| - assert(invariant(node, node.isPropertyAccess));
|
| + assert(node.isPropertyAccess, failedAt(node));
|
| selector = new Selector.getter(name);
|
| registry.registerDynamicUse(new DynamicUse(selector, null));
|
| sendStructure = new GetStructure(semantics);
|
| @@ -2441,7 +2444,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| registry.registerDynamicUse(new DynamicUse(selector, null));
|
| sendStructure = new InvokeStructure(semantics, selector);
|
| } else {
|
| - assert(invariant(node, node.isPropertyAccess));
|
| + assert(node.isPropertyAccess, failedAt(node));
|
| selector = new Selector.getter(name);
|
| registry.registerDynamicUse(new DynamicUse(selector, null));
|
| sendStructure = new GetStructure(semantics);
|
| @@ -2606,8 +2609,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| semantics = new StaticAccess.localVariable(element);
|
| }
|
| } else {
|
| - assert(invariant(node, element.isFunction,
|
| - message: "Unexpected local $element."));
|
| + assert(element.isFunction, failedAt(node, "Unexpected local $element."));
|
| error = reportAndCreateErroneousElement(
|
| node.selector, name.text, MessageKind.ASSIGNING_METHOD, const {});
|
| semantics = new StaticAccess.localFunction(element);
|
| @@ -2858,8 +2860,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| : new StaticAccess.staticMethod(method);
|
| } else {
|
| // `a = b`, `a++` or `a += b` where `a` is a field.
|
| - assert(invariant(node, member.isField,
|
| - message: "Unexpected element: $member."));
|
| + assert(member.isField, failedAt(node, "Unexpected element: $member."));
|
| if (node.isComplex) {
|
| // `a++` or `a += b` where `a` is a field.
|
| registry.registerStaticUse(new StaticUse.staticGet(member));
|
| @@ -2889,8 +2890,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| }
|
| if (element.isMalformed) {
|
| // This handles elements with parser errors.
|
| - assert(invariant(node, element is! ErroneousElement,
|
| - message: "Unexpected erroneous element $element."));
|
| + assert(element is! ErroneousElement,
|
| + failedAt(node, "Unexpected erroneous element $element."));
|
| return handleErroneousAccess(
|
| node, name, new StaticAccess.unresolved(element));
|
| }
|
| @@ -2929,8 +2930,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| }
|
| if (element.isMalformed) {
|
| // This handles elements with parser errors..
|
| - assert(invariant(node, element is! ErroneousElement,
|
| - message: "Unexpected erroneous element $element."));
|
| + assert(element is! ErroneousElement,
|
| + failedAt(node, "Unexpected erroneous element $element."));
|
| return handleUpdate(node, name, new StaticAccess.unresolved(element));
|
| }
|
| if (element.isInstanceMember) {
|
| @@ -4059,7 +4060,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| .compileNode(node, registry.mapping, enforceConst: enforceConst);
|
|
|
| if (constant == null) {
|
| - assert(invariant(node, reporter.hasReportedError));
|
| + assert(reporter.hasReportedError, failedAt(node));
|
| return;
|
| }
|
|
|
| @@ -4383,7 +4384,7 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| }
|
| } else {
|
| // The selector may only be null if we reported an error.
|
| - assert(invariant(declaration, reporter.hasReportedError));
|
| + assert(reporter.hasReportedError, failedAt(declaration));
|
| }
|
| if (loopVariable != null) {
|
| // loopVariable may be null if it could not be resolved.
|
| @@ -4544,8 +4545,8 @@ class ResolverVisitor extends MappingVisitor<ResolutionResult> {
|
| // Analyze the constant.
|
| ConstantExpression constant =
|
| registry.getConstant(caseMatch.expression);
|
| - assert(invariant(node, constant != null,
|
| - message: 'No constant computed for $node'));
|
| + assert(
|
| + constant != null, failedAt(node, 'No constant computed for $node'));
|
|
|
| ConstantValue value = resolution.constants.getConstantValue(constant);
|
| ResolutionDartType caseType =
|
|
|