| 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 e73402f22848ee5a843f09afeb1d28f72ccb9e09..4d770f69583c56a2ab5e2c2cb841a24c2c2c470b 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder.dart
|
| @@ -15,7 +15,6 @@ import '../compiler.dart' show Compiler;
|
| import '../constants/constant_system.dart';
|
| import '../constants/expressions.dart';
|
| import '../constants/values.dart';
|
| -import '../common_elements.dart' show CommonElements;
|
| import '../elements/resolution_types.dart';
|
| import '../diagnostics/messages.dart' show Message, MessageTemplate;
|
| import '../dump_info.dart' show InfoReporter;
|
| @@ -227,10 +226,6 @@ class SsaBuilder extends ast.Visitor
|
|
|
| RuntimeTypesEncoder get rtiEncoder => backend.rtiEncoder;
|
|
|
| - DiagnosticReporter get reporter => compiler.reporter;
|
| -
|
| - CommonElements get commonElements => closedWorld.commonElements;
|
| -
|
| Element get targetElement => target;
|
|
|
| /// Reference to resolved elements in [target]'s AST.
|
| @@ -285,7 +280,7 @@ class SsaBuilder extends ast.Visitor
|
| result = buildMethod(target);
|
| } else if (target.isField) {
|
| if (target.isInstanceMember) {
|
| - assert(compiler.options.enableTypeAssertions);
|
| + assert(options.enableTypeAssertions);
|
| result = buildCheckedSetter(target);
|
| } else {
|
| result = buildLazyInitializer(target);
|
| @@ -427,7 +422,7 @@ class SsaBuilder extends ast.Visitor
|
| if (cachedCanBeInlined == false) return false;
|
|
|
| bool meetsHardConstraints() {
|
| - if (compiler.options.disableInlining) return false;
|
| + if (options.disableInlining) return false;
|
|
|
| assert(invariant(
|
| currentNode != null ? currentNode : function,
|
| @@ -474,7 +469,7 @@ class SsaBuilder extends ast.Visitor
|
| bool doesNotContainCode() {
|
| // A function with size 1 does not contain any code.
|
| return InlineWeeder.canBeInlined(functionResolvedAst, 1,
|
| - enableUserAssertions: compiler.options.enableUserAssertions);
|
| + enableUserAssertions: options.enableUserAssertions);
|
| }
|
|
|
| bool reductiveHeuristic() {
|
| @@ -482,7 +477,7 @@ class SsaBuilder extends ast.Visitor
|
| // does not make the program larger.
|
| if (isCalledOnce(function)) {
|
| return InlineWeeder.canBeInlined(functionResolvedAst, null,
|
| - enableUserAssertions: compiler.options.enableUserAssertions);
|
| + enableUserAssertions: options.enableUserAssertions);
|
| }
|
| // TODO(sra): Measure if inlining would 'reduce' the size. One desirable
|
| // case we miss by doing nothing is inlining very simple constructors
|
| @@ -521,7 +516,7 @@ class SsaBuilder extends ast.Visitor
|
| // if we can inline this method regardless of size.
|
| assert(InlineWeeder.canBeInlined(functionResolvedAst, null,
|
| allowLoops: true,
|
| - enableUserAssertions: compiler.options.enableUserAssertions));
|
| + enableUserAssertions: options.enableUserAssertions));
|
| return true;
|
| }
|
|
|
| @@ -543,7 +538,7 @@ class SsaBuilder extends ast.Visitor
|
| }
|
| bool canInline = InlineWeeder.canBeInlined(
|
| functionResolvedAst, maxInliningNodes,
|
| - enableUserAssertions: compiler.options.enableUserAssertions);
|
| + enableUserAssertions: options.enableUserAssertions);
|
| if (canInline) {
|
| backend.inlineCache.markAsInlinable(function, insideLoop: insideLoop);
|
| } else {
|
| @@ -1508,7 +1503,7 @@ class SsaBuilder extends ast.Visitor
|
| HInstruction popBoolified() {
|
| HInstruction value = pop();
|
| if (typeBuilder.checkOrTrustTypes) {
|
| - ResolutionInterfaceType boolType = compiler.commonElements.boolType;
|
| + ResolutionInterfaceType boolType = commonElements.boolType;
|
| return typeBuilder.potentiallyCheckOrTrustType(value, boolType,
|
| kind: HTypeConversion.BOOLEAN_CONVERSION_CHECK);
|
| }
|
| @@ -1535,7 +1530,7 @@ class SsaBuilder extends ast.Visitor
|
| }
|
|
|
| visitAssert(ast.Assert node) {
|
| - if (!compiler.options.enableUserAssertions) return;
|
| + if (!options.enableUserAssertions) return;
|
|
|
| if (!node.hasMessage) {
|
| // Generate:
|
| @@ -1855,7 +1850,7 @@ class SsaBuilder extends ast.Visitor
|
| void visitThen(),
|
| void visitElse(),
|
| SourceInformation sourceInformation}) {
|
| - SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, node);
|
| branchBuilder.handleIf(visitCondition, visitThen, visitElse,
|
| sourceInformation: sourceInformation);
|
| }
|
| @@ -1872,7 +1867,7 @@ class SsaBuilder extends ast.Visitor
|
|
|
| @override
|
| void visitIfNull(ast.Send node, ast.Node left, ast.Node right, _) {
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleIfNull(() => visit(left), () => visit(right));
|
| }
|
|
|
| @@ -1917,14 +1912,14 @@ class SsaBuilder extends ast.Visitor
|
|
|
| @override
|
| void visitLogicalAnd(ast.Send node, ast.Node left, ast.Node right, _) {
|
| - SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, node);
|
| handleLogicalBinaryWithLeftNode(left, () => visit(right), branchBuilder,
|
| isAnd: true);
|
| }
|
|
|
| @override
|
| void visitLogicalOr(ast.Send node, ast.Node left, ast.Node right, _) {
|
| - SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, node);
|
| handleLogicalBinaryWithLeftNode(left, () => visit(right), branchBuilder,
|
| isAnd: false);
|
| }
|
| @@ -2193,7 +2188,7 @@ class SsaBuilder extends ast.Visitor
|
| // we will be able to later compress it as:
|
| // t1 || t1.x
|
| HInstruction expression;
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleConditional(
|
| () {
|
| expression = visitAndPop(receiver);
|
| @@ -2552,7 +2547,7 @@ class SsaBuilder extends ast.Visitor
|
| ast.NodeList arguments, Selector selector, _) {
|
| /// Desugar `exp?.m()` to `(t1 = exp) == null ? t1 : t1.m()`
|
| HInstruction receiver;
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleConditional(() {
|
| receiver = generateInstanceSendReceiver(node);
|
| pushCheckNull(receiver);
|
| @@ -2723,7 +2718,7 @@ class SsaBuilder extends ast.Visitor
|
| value = backend.mirrorsData.mustRetainMetadata;
|
| break;
|
| case 'USE_CONTENT_SECURITY_POLICY':
|
| - value = compiler.options.useContentSecurityPolicy;
|
| + value = options.useContentSecurityPolicy;
|
| break;
|
| default:
|
| reporter.reportErrorMessage(node, MessageKind.GENERIC,
|
| @@ -3503,7 +3498,7 @@ class SsaBuilder extends ast.Visitor
|
| /// returns [:true:] if an error can be statically determined.
|
| bool checkTypeVariableBounds(
|
| ast.NewExpression node, ResolutionInterfaceType type) {
|
| - if (!compiler.options.enableTypeAssertions) return false;
|
| + if (!options.enableTypeAssertions) return false;
|
|
|
| Map<ResolutionDartType, Set<ResolutionDartType>> seenChecksMap =
|
| new Map<ResolutionDartType, Set<ResolutionDartType>>();
|
| @@ -3889,7 +3884,7 @@ class SsaBuilder extends ast.Visitor
|
| void bulkHandleNew(ast.NewExpression node, [_]) {
|
| Element element = elements[node.send];
|
| final bool isSymbolConstructor =
|
| - element == compiler.commonElements.symbolConstructor;
|
| + element == commonElements.symbolConstructor;
|
| if (!Elements.isMalformed(element)) {
|
| ConstructorElement function = element;
|
| element = function.effectiveTarget;
|
| @@ -4037,7 +4032,7 @@ class SsaBuilder extends ast.Visitor
|
|
|
| var nativeBehavior = new native.NativeBehavior()
|
| ..codeTemplate = codeTemplate;
|
| - if (compiler.options.trustJSInteropTypeAnnotations) {
|
| + if (options.trustJSInteropTypeAnnotations) {
|
| nativeBehavior.typesReturned.add(constructor.enclosingClass.thisType);
|
| }
|
| return new HForeignCode(
|
| @@ -4068,10 +4063,9 @@ class SsaBuilder extends ast.Visitor
|
| // Native behavior effects here are similar to native/behavior.dart.
|
| // The return type is dynamic if we don't trust js-interop type
|
| // declarations.
|
| - nativeBehavior.typesReturned.add(
|
| - compiler.options.trustJSInteropTypeAnnotations
|
| - ? type
|
| - : const ResolutionDynamicType());
|
| + nativeBehavior.typesReturned.add(options.trustJSInteropTypeAnnotations
|
| + ? type
|
| + : const ResolutionDynamicType());
|
|
|
| // The allocation effects include the declared type if it is native (which
|
| // includes js interop types).
|
| @@ -4082,7 +4076,7 @@ class SsaBuilder extends ast.Visitor
|
|
|
| // It also includes any other JS interop type if we don't trust the
|
| // annotation or if is declared too broad.
|
| - if (!compiler.options.trustJSInteropTypeAnnotations ||
|
| + if (!options.trustJSInteropTypeAnnotations ||
|
| type.isObject ||
|
| type.isDynamic) {
|
| ClassElement cls = backend.helpers.jsJavaScriptObjectClass;
|
| @@ -4243,7 +4237,7 @@ class SsaBuilder extends ast.Visitor
|
| }
|
|
|
| if (node.isIfNullAssignment) {
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleIfNull(() => stack.add(getterInstruction), () {
|
| addDynamicSendArgumentsToList(node, setterInputs);
|
| generateSuperSendSet();
|
| @@ -4563,7 +4557,7 @@ class SsaBuilder extends ast.Visitor
|
| // if (t1 == null)
|
| // t1 = x[i] = e;
|
| // result = t1
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleIfNull(() => stack.add(getterInstruction), () {
|
| visit(arguments.head);
|
| HInstruction value = pop();
|
| @@ -4614,7 +4608,7 @@ class SsaBuilder extends ast.Visitor
|
| // else
|
| // result = e.x = e2
|
| HInstruction receiverInstruction;
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleConditional(
|
| () {
|
| receiverInstruction = generateInstanceSendReceiver(node);
|
| @@ -4787,8 +4781,7 @@ class SsaBuilder extends ast.Visitor
|
| receiver);
|
| HInstruction getterInstruction = pop();
|
| if (node.isIfNullAssignment) {
|
| - SsaBranchBuilder brancher =
|
| - new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleIfNull(() => stack.add(getterInstruction), () {
|
| visit(node.arguments.head);
|
| generateInstanceSetterWithCompiledReceiver(node, receiver, pop());
|
| @@ -4809,7 +4802,7 @@ class SsaBuilder extends ast.Visitor
|
| // t1 = e
|
| // t1 == null ? t1 : (t1.x = t1.x op e2);
|
| HInstruction receiver;
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleConditional(() {
|
| receiver = generateInstanceSendReceiver(node);
|
| pushCheckNull(receiver);
|
| @@ -4835,7 +4828,7 @@ class SsaBuilder extends ast.Visitor
|
| }
|
| HInstruction getterInstruction = pop();
|
| if (node.isIfNullAssignment) {
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleIfNull(() => stack.add(getterInstruction), () {
|
| visit(node.arguments.head);
|
| generateNonInstanceSetter(node, element, pop());
|
| @@ -5134,7 +5127,7 @@ class SsaBuilder extends ast.Visitor
|
| visit(node.expression);
|
| value = pop();
|
| if (isBuildingAsyncFunction) {
|
| - if (compiler.options.enableTypeAssertions &&
|
| + if (options.enableTypeAssertions &&
|
| !isValidAsyncReturnType(returnType)) {
|
| String message = "Async function returned a Future, "
|
| "was declared to return a $returnType.";
|
| @@ -5246,7 +5239,7 @@ class SsaBuilder extends ast.Visitor
|
| commonMasks.dynamicType;
|
|
|
| visitConditional(ast.Conditional node) {
|
| - SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node);
|
| + SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
|
| brancher.handleConditional(() => visit(node.condition),
|
| () => visit(node.thenExpression), () => visit(node.elseExpression));
|
| }
|
| @@ -5268,7 +5261,8 @@ class SsaBuilder extends ast.Visitor
|
| }
|
|
|
| visitModifiers(ast.Modifiers node) {
|
| - compiler.unimplemented(node, 'SsaFromAstMixin.visitModifiers.');
|
| + throw new SpannableAssertionFailure(
|
| + node, 'SsaFromAstMixin.visitModifiers not implemented.');
|
| }
|
|
|
| visitBreakStatement(ast.BreakStatement node) {
|
| @@ -6370,11 +6364,13 @@ class SsaBuilder extends ast.Visitor
|
| }
|
|
|
| visitTypedef(ast.Typedef node) {
|
| - compiler.unimplemented(node, 'SsaFromAstMixin.visitTypedef.');
|
| + throw new SpannableAssertionFailure(
|
| + node, 'SsaFromAstMixin.visitTypedef not implemented.');
|
| }
|
|
|
| visitTypeVariable(ast.TypeVariable node) {
|
| - reporter.internalError(node, 'SsaFromAstMixin.visitTypeVariable.');
|
| + throw new SpannableAssertionFailure(
|
| + node, 'SsaFromAstMixin.visitTypeVariable not implemented.');
|
| }
|
|
|
| /**
|
| @@ -6490,8 +6486,6 @@ class StringBuilderVisitor extends ast.Visitor {
|
|
|
| StringBuilderVisitor(this.builder, this.diagnosticNode);
|
|
|
| - Compiler get compiler => builder.compiler;
|
| -
|
| void visit(ast.Node node) {
|
| node.accept(this);
|
| }
|
|
|