Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Issue 2777893002: Rename BuilderAccessor to FastaAccessor. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library fasta.body_builder; 5 library fasta.body_builder;
6 6
7 import '../parser/parser.dart' show FormalParameterType, optional; 7 import '../parser/parser.dart' show FormalParameterType, optional;
8 8
9 import '../parser/error_kind.dart' show ErrorKind; 9 import '../parser/error_kind.dart' show ErrorKind;
10 10
(...skipping 19 matching lines...) Expand all
30 30
31 import '../errors.dart' show formatUnexpected, internalError; 31 import '../errors.dart' show formatUnexpected, internalError;
32 32
33 import '../source/scope_listener.dart' 33 import '../source/scope_listener.dart'
34 show JumpTargetKind, NullValue, ScopeListener; 34 show JumpTargetKind, NullValue, ScopeListener;
35 35
36 import '../builder/scope.dart' show ProblemBuilder, Scope; 36 import '../builder/scope.dart' show ProblemBuilder, Scope;
37 37
38 import '../source/outline_builder.dart' show asyncMarkerFromTokens; 38 import '../source/outline_builder.dart' show asyncMarkerFromTokens;
39 39
40 import 'builder_accessors.dart'; 40 import 'fasta_accessors.dart';
41 41
42 import '../quote.dart' 42 import '../quote.dart'
43 show 43 show
44 Quote, 44 Quote,
45 analyzeQuote, 45 analyzeQuote,
46 unescape, 46 unescape,
47 unescapeFirstStringPart, 47 unescapeFirstStringPart,
48 unescapeLastStringPart, 48 unescapeLastStringPart,
49 unescapeString; 49 unescapeString;
50 50
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 if (isDartLibrary && 148 if (isDartLibrary &&
149 node.name.name == "main" && 149 node.name.name == "main" &&
150 library.uri.path == "_builtin" && 150 library.uri.path == "_builtin" &&
151 member?.name == "_getMainClosure") { 151 member?.name == "_getMainClosure") {
152 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28989 152 // TODO(ahe): https://github.com/dart-lang/sdk/issues/28989
153 return new NullLiteral()..fileOffset = node.fileOffset; 153 return new NullLiteral()..fileOffset = node.fileOffset;
154 } 154 }
155 return throwNoSuchMethodError( 155 return throwNoSuchMethodError(
156 node.name.name, new Arguments.empty(), node.fileOffset, 156 node.name.name, new Arguments.empty(), node.fileOffset,
157 isGetter: true); 157 isGetter: true);
158 } else if (node is BuilderAccessor) { 158 } else if (node is FastaAccessor) {
159 return node.buildSimpleRead(); 159 return node.buildSimpleRead();
160 } else if (node is TypeVariableBuilder) { 160 } else if (node is TypeVariableBuilder) {
161 TypeParameterType type = node.buildTypesWithBuiltArguments(library, null); 161 TypeParameterType type = node.buildTypesWithBuiltArguments(library, null);
162 if (!isInstanceContext && type.parameter.parent is Class) { 162 if (!isInstanceContext && type.parameter.parent is Class) {
163 return buildCompileTimeError( 163 return buildCompileTimeError(
164 "Type variables can only be used in instance methods."); 164 "Type variables can only be used in instance methods.");
165 } else { 165 } else {
166 if (constantExpressionRequired) { 166 if (constantExpressionRequired) {
167 addCompileTimeError(-1, 167 addCompileTimeError(-1,
168 "Type variable can't be used as a constant expression $type."); 168 "Type variable can't be used as a constant expression $type.");
169 } 169 }
170 return new TypeLiteral(type); 170 return new TypeLiteral(type);
171 } 171 }
172 } else if (node is TypeDeclarationBuilder) { 172 } else if (node is TypeDeclarationBuilder) {
173 return new TypeLiteral(node.buildTypesWithBuiltArguments(library, null)); 173 return new TypeLiteral(node.buildTypesWithBuiltArguments(library, null));
174 } else if (node is KernelTypeBuilder) { 174 } else if (node is KernelTypeBuilder) {
175 return new TypeLiteral(node.build(library)); 175 return new TypeLiteral(node.build(library));
176 } else if (node is Expression) { 176 } else if (node is Expression) {
177 return node; 177 return node;
178 } else if (node is PrefixBuilder) { 178 } else if (node is PrefixBuilder) {
179 return buildCompileTimeError("A library can't be used as an expression."); 179 return buildCompileTimeError("A library can't be used as an expression.");
180 } else if (node is ProblemBuilder) { 180 } else if (node is ProblemBuilder) {
181 return buildProblemExpression(node, -1); 181 return buildProblemExpression(node, -1);
182 } else { 182 } else {
183 return internalError("Unhandled: ${node.runtimeType}"); 183 return internalError("Unhandled: ${node.runtimeType}");
184 } 184 }
185 } 185 }
186 186
187 Expression toEffect(Object node) { 187 Expression toEffect(Object node) {
188 if (node is BuilderAccessor) return node.buildForEffect(); 188 if (node is FastaAccessor) return node.buildForEffect();
189 return toValue(node); 189 return toValue(node);
190 } 190 }
191 191
192 List<Expression> popListForValue(int n) { 192 List<Expression> popListForValue(int n) {
193 List<Expression> list = 193 List<Expression> list =
194 new List<Expression>.filled(n, null, growable: true); 194 new List<Expression>.filled(n, null, growable: true);
195 for (int i = n - 1; i >= 0; i--) { 195 for (int i = n - 1; i >= 0; i--) {
196 list[i] = popForValue(); 196 list[i] = popForValue();
197 } 197 }
198 return list; 198 return list;
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 382
383 @override 383 @override
384 void endInitializer(Token token) { 384 void endInitializer(Token token) {
385 debugEvent("endInitializer"); 385 debugEvent("endInitializer");
386 assert(!inInitializer); 386 assert(!inInitializer);
387 final member = this.member; 387 final member = this.member;
388 var node = pop(); 388 var node = pop();
389 Initializer initializer; 389 Initializer initializer;
390 if (node is Initializer) { 390 if (node is Initializer) {
391 initializer = node; 391 initializer = node;
392 } else if (node is BuilderAccessor) { 392 } else if (node is FastaAccessor) {
393 initializer = node.buildFieldInitializer(fieldInitializers); 393 initializer = node.buildFieldInitializer(fieldInitializers);
394 } else if (node is ConstructorInvocation) { 394 } else if (node is ConstructorInvocation) {
395 initializer = new SuperInitializer(node.target, node.arguments); 395 initializer = new SuperInitializer(node.target, node.arguments);
396 } else { 396 } else {
397 if (node is! Throw) { 397 if (node is! Throw) {
398 node = wrapInvalid(node); 398 node = wrapInvalid(node);
399 } 399 }
400 initializer = 400 initializer =
401 new LocalInitializer(new VariableDeclaration.forValue(node)); 401 new LocalInitializer(new VariableDeclaration.forValue(node));
402 } 402 }
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 } 517 }
518 518
519 @override 519 @override
520 finishSend(Object receiver, Arguments arguments, int charOffset) { 520 finishSend(Object receiver, Arguments arguments, int charOffset) {
521 bool isIdentical(Object receiver) { 521 bool isIdentical(Object receiver) {
522 return receiver is StaticAccessor && 522 return receiver is StaticAccessor &&
523 receiver.readTarget == 523 receiver.readTarget ==
524 coreTypes.tryGetTopLevelMember("dart:core", null, "identical"); 524 coreTypes.tryGetTopLevelMember("dart:core", null, "identical");
525 } 525 }
526 526
527 if (receiver is BuilderAccessor) { 527 if (receiver is FastaAccessor) {
528 if (constantExpressionRequired && !isIdentical(receiver)) { 528 if (constantExpressionRequired && !isIdentical(receiver)) {
529 addCompileTimeError(charOffset, "Not a constant expression."); 529 addCompileTimeError(charOffset, "Not a constant expression.");
530 } 530 }
531 return receiver.doInvocation(charOffset, arguments); 531 return receiver.doInvocation(charOffset, arguments);
532 } else if (receiver is UnresolvedIdentifier) { 532 } else if (receiver is UnresolvedIdentifier) {
533 return throwNoSuchMethodError( 533 return throwNoSuchMethodError(
534 receiver.name.name, arguments, receiver.fileOffset); 534 receiver.name.name, arguments, receiver.fileOffset);
535 } else { 535 } else {
536 return buildMethodInvocation( 536 return buildMethodInvocation(
537 toValue(receiver), callName, arguments, charOffset); 537 toValue(receiver), callName, arguments, charOffset);
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 } 1029 }
1030 1030
1031 @override 1031 @override
1032 void handleAssignmentExpression(Token token) { 1032 void handleAssignmentExpression(Token token) {
1033 debugEvent("AssignmentExpression"); 1033 debugEvent("AssignmentExpression");
1034 Expression value = popForValue(); 1034 Expression value = popForValue();
1035 var accessor = pop(); 1035 var accessor = pop();
1036 if (accessor is TypeDeclarationBuilder) { 1036 if (accessor is TypeDeclarationBuilder) {
1037 push(wrapInvalid(new TypeLiteral( 1037 push(wrapInvalid(new TypeLiteral(
1038 accessor.buildTypesWithBuiltArguments(library, null)))); 1038 accessor.buildTypesWithBuiltArguments(library, null))));
1039 } else if (accessor is! BuilderAccessor) { 1039 } else if (accessor is! FastaAccessor) {
1040 push(buildCompileTimeError("Can't assign to this.", token.charOffset)); 1040 push(buildCompileTimeError("Can't assign to this.", token.charOffset));
1041 } else { 1041 } else {
1042 push(new DelayedAssignment( 1042 push(new DelayedAssignment(
1043 this, token.charOffset, accessor, value, token.stringValue)); 1043 this, token.charOffset, accessor, value, token.stringValue));
1044 } 1044 }
1045 } 1045 }
1046 1046
1047 @override 1047 @override
1048 void enterLoop(int charOffset) { 1048 void enterLoop(int charOffset) {
1049 if (peek() is LabelTarget) { 1049 if (peek() is LabelTarget) {
(...skipping 24 matching lines...) Expand all
1074 Statement conditionStatement = popStatement(); 1074 Statement conditionStatement = popStatement();
1075 Expression condition = null; 1075 Expression condition = null;
1076 if (conditionStatement is ExpressionStatement) { 1076 if (conditionStatement is ExpressionStatement) {
1077 condition = conditionStatement.expression; 1077 condition = conditionStatement.expression;
1078 } else { 1078 } else {
1079 assert(conditionStatement is EmptyStatement); 1079 assert(conditionStatement is EmptyStatement);
1080 } 1080 }
1081 List<VariableDeclaration> variables = <VariableDeclaration>[]; 1081 List<VariableDeclaration> variables = <VariableDeclaration>[];
1082 dynamic variableOrExpression = pop(); 1082 dynamic variableOrExpression = pop();
1083 Statement begin; 1083 Statement begin;
1084 if (variableOrExpression is BuilderAccessor) { 1084 if (variableOrExpression is FastaAccessor) {
1085 variableOrExpression = variableOrExpression.buildForEffect(); 1085 variableOrExpression = variableOrExpression.buildForEffect();
1086 } 1086 }
1087 if (variableOrExpression is VariableDeclaration) { 1087 if (variableOrExpression is VariableDeclaration) {
1088 variables.add(variableOrExpression); 1088 variables.add(variableOrExpression);
1089 } else if (variableOrExpression is List) { 1089 } else if (variableOrExpression is List) {
1090 // TODO(sigmund): remove this assignment (see issue #28651) 1090 // TODO(sigmund): remove this assignment (see issue #28651)
1091 Iterable vars = variableOrExpression; 1091 Iterable vars = variableOrExpression;
1092 variables.addAll(vars); 1092 variables.addAll(vars);
1093 } else if (variableOrExpression == null) { 1093 } else if (variableOrExpression == null) {
1094 // Do nothing. 1094 // Do nothing.
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1286 } else { 1286 } else {
1287 push(const DynamicType()); 1287 push(const DynamicType());
1288 addCompileTimeError(beginToken.charOffset, 1288 addCompileTimeError(beginToken.charOffset,
1289 "Can't be used as a type: '${debugName(prefix, suffix)}'."); 1289 "Can't be used as a type: '${debugName(prefix, suffix)}'.");
1290 return; 1290 return;
1291 } 1291 }
1292 } 1292 }
1293 if (name is Identifier) { 1293 if (name is Identifier) {
1294 name = name.name; 1294 name = name.name;
1295 } 1295 }
1296 if (name is BuilderAccessor) { 1296 if (name is FastaAccessor) {
1297 warning("'${beginToken.lexeme}' isn't a type.", beginToken.charOffset); 1297 warning("'${beginToken.lexeme}' isn't a type.", beginToken.charOffset);
1298 push(const DynamicType()); 1298 push(const DynamicType());
1299 } else if (name is UnresolvedIdentifier) { 1299 } else if (name is UnresolvedIdentifier) {
1300 warning("'${name.name}' isn't a type.", beginToken.charOffset); 1300 warning("'${name.name}' isn't a type.", beginToken.charOffset);
1301 push(const DynamicType()); 1301 push(const DynamicType());
1302 } else if (name is TypeVariableBuilder) { 1302 } else if (name is TypeVariableBuilder) {
1303 if (constantExpressionRequired) { 1303 if (constantExpressionRequired) {
1304 addCompileTimeError( 1304 addCompileTimeError(
1305 beginToken.charOffset, "Not a constant expression."); 1305 beginToken.charOffset, "Not a constant expression.");
1306 } 1306 }
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 Name incrementOperator(Token token) { 1593 Name incrementOperator(Token token) {
1594 if (optional("++", token)) return plusName; 1594 if (optional("++", token)) return plusName;
1595 if (optional("--", token)) return minusName; 1595 if (optional("--", token)) return minusName;
1596 return internalError("Unknown increment operator: ${token.lexeme}"); 1596 return internalError("Unknown increment operator: ${token.lexeme}");
1597 } 1597 }
1598 1598
1599 @override 1599 @override
1600 void handleUnaryPrefixAssignmentExpression(Token token) { 1600 void handleUnaryPrefixAssignmentExpression(Token token) {
1601 debugEvent("UnaryPrefixAssignmentExpression"); 1601 debugEvent("UnaryPrefixAssignmentExpression");
1602 var accessor = pop(); 1602 var accessor = pop();
1603 if (accessor is BuilderAccessor) { 1603 if (accessor is FastaAccessor) {
1604 push(accessor.buildPrefixIncrement(incrementOperator(token), 1604 push(accessor.buildPrefixIncrement(incrementOperator(token),
1605 offset: token.charOffset)); 1605 offset: token.charOffset));
1606 } else { 1606 } else {
1607 push(wrapInvalid(toValue(accessor))); 1607 push(wrapInvalid(toValue(accessor)));
1608 } 1608 }
1609 } 1609 }
1610 1610
1611 @override 1611 @override
1612 void handleUnaryPostfixAssignmentExpression(Token token) { 1612 void handleUnaryPostfixAssignmentExpression(Token token) {
1613 debugEvent("UnaryPostfixAssignmentExpression"); 1613 debugEvent("UnaryPostfixAssignmentExpression");
1614 var accessor = pop(); 1614 var accessor = pop();
1615 if (accessor is BuilderAccessor) { 1615 if (accessor is FastaAccessor) {
1616 push(new DelayedPostfixIncrement( 1616 push(new DelayedPostfixIncrement(
1617 this, token.charOffset, accessor, incrementOperator(token), null)); 1617 this, token.charOffset, accessor, incrementOperator(token), null));
1618 } else { 1618 } else {
1619 push(wrapInvalid(toValue(accessor))); 1619 push(wrapInvalid(toValue(accessor)));
1620 } 1620 }
1621 } 1621 }
1622 1622
1623 @override 1623 @override
1624 void endConstructorReference( 1624 void endConstructorReference(
1625 Token start, Token periodBeforeName, Token endToken) { 1625 Token start, Token periodBeforeName, Token endToken) {
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
1978 exitLocalScope(); 1978 exitLocalScope();
1979 JumpTarget continueTarget = exitContinueTarget(); 1979 JumpTarget continueTarget = exitContinueTarget();
1980 JumpTarget breakTarget = exitBreakTarget(); 1980 JumpTarget breakTarget = exitBreakTarget();
1981 if (continueTarget.hasUsers) { 1981 if (continueTarget.hasUsers) {
1982 body = new LabeledStatement(body); 1982 body = new LabeledStatement(body);
1983 continueTarget.resolveContinues(body); 1983 continueTarget.resolveContinues(body);
1984 } 1984 }
1985 VariableDeclaration variable; 1985 VariableDeclaration variable;
1986 if (lvalue is VariableDeclaration) { 1986 if (lvalue is VariableDeclaration) {
1987 variable = lvalue; 1987 variable = lvalue;
1988 } else if (lvalue is BuilderAccessor) { 1988 } else if (lvalue is FastaAccessor) {
1989 /// We are in this case, where `lvalue` isn't a [VariableDeclaration]: 1989 /// We are in this case, where `lvalue` isn't a [VariableDeclaration]:
1990 /// 1990 ///
1991 /// for (lvalue in expression) body 1991 /// for (lvalue in expression) body
1992 /// 1992 ///
1993 /// This is normalized to: 1993 /// This is normalized to:
1994 /// 1994 ///
1995 /// for (final #t in expression) { 1995 /// for (final #t in expression) {
1996 /// lvalue = #t; 1996 /// lvalue = #t;
1997 /// body; 1997 /// body;
1998 /// } 1998 /// }
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
2479 nextCascade = newCascade; 2479 nextCascade = newCascade;
2480 } 2480 }
2481 2481
2482 void finalize(Expression expression) { 2482 void finalize(Expression expression) {
2483 assert(nextCascade.variable.initializer is InvalidExpression); 2483 assert(nextCascade.variable.initializer is InvalidExpression);
2484 nextCascade.variable.initializer = expression; 2484 nextCascade.variable.initializer = expression;
2485 expression.parent = nextCascade.variable; 2485 expression.parent = nextCascade.variable;
2486 } 2486 }
2487 } 2487 }
2488 2488
2489 abstract class ContextAccessor extends BuilderAccessor { 2489 abstract class ContextAccessor extends FastaAccessor {
2490 final BuilderHelper helper; 2490 final BuilderHelper helper;
2491 2491
2492 final BuilderAccessor accessor; 2492 final FastaAccessor accessor;
2493 2493
2494 final int offset; 2494 final int offset;
2495 2495
2496 ContextAccessor(this.helper, this.offset, this.accessor); 2496 ContextAccessor(this.helper, this.offset, this.accessor);
2497 2497
2498 @override 2498 @override
2499 Expression get builtBinary => internalError("Unsupported operation."); 2499 Expression get builtBinary => internalError("Unsupported operation.");
2500 2500
2501 @override 2501 @override
2502 void set builtBinary(Expression expression) { 2502 void set builtBinary(Expression expression) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
2558 "Can't be used as left-hand side of assignment.", offset); 2558 "Can't be used as left-hand side of assignment.", offset);
2559 } 2559 }
2560 } 2560 }
2561 2561
2562 class DelayedAssignment extends ContextAccessor { 2562 class DelayedAssignment extends ContextAccessor {
2563 final Expression value; 2563 final Expression value;
2564 2564
2565 final String assignmentOperator; 2565 final String assignmentOperator;
2566 2566
2567 DelayedAssignment(BuilderHelper helper, int charOffset, 2567 DelayedAssignment(BuilderHelper helper, int charOffset,
2568 BuilderAccessor accessor, this.value, this.assignmentOperator) 2568 FastaAccessor accessor, this.value, this.assignmentOperator)
2569 : super(helper, charOffset, accessor); 2569 : super(helper, charOffset, accessor);
2570 2570
2571 Expression buildSimpleRead() { 2571 Expression buildSimpleRead() {
2572 return handleAssignment(false); 2572 return handleAssignment(false);
2573 } 2573 }
2574 2574
2575 Expression buildForEffect() { 2575 Expression buildForEffect() {
2576 return handleAssignment(true); 2576 return handleAssignment(true);
2577 } 2577 }
2578 2578
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2636 return accessor.buildFieldInitializer(initializers); 2636 return accessor.buildFieldInitializer(initializers);
2637 } 2637 }
2638 } 2638 }
2639 2639
2640 class DelayedPostfixIncrement extends ContextAccessor { 2640 class DelayedPostfixIncrement extends ContextAccessor {
2641 final Name binaryOperator; 2641 final Name binaryOperator;
2642 2642
2643 final Procedure interfaceTarget; 2643 final Procedure interfaceTarget;
2644 2644
2645 DelayedPostfixIncrement(BuilderHelper helper, int offset, 2645 DelayedPostfixIncrement(BuilderHelper helper, int offset,
2646 BuilderAccessor accessor, this.binaryOperator, this.interfaceTarget) 2646 FastaAccessor accessor, this.binaryOperator, this.interfaceTarget)
2647 : super(helper, offset, accessor); 2647 : super(helper, offset, accessor);
2648 2648
2649 Expression buildSimpleRead() { 2649 Expression buildSimpleRead() {
2650 return accessor.buildPostfixIncrement(binaryOperator, 2650 return accessor.buildPostfixIncrement(binaryOperator,
2651 offset: offset, voidContext: false, interfaceTarget: interfaceTarget); 2651 offset: offset, voidContext: false, interfaceTarget: interfaceTarget);
2652 } 2652 }
2653 2653
2654 Expression buildForEffect() { 2654 Expression buildForEffect() {
2655 return accessor.buildPostfixIncrement(binaryOperator, 2655 return accessor.buildPostfixIncrement(binaryOperator,
2656 offset: offset, voidContext: true, interfaceTarget: interfaceTarget); 2656 offset: offset, voidContext: true, interfaceTarget: interfaceTarget);
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
2873 if (node is Identifier) { 2873 if (node is Identifier) {
2874 return node.name; 2874 return node.name;
2875 } else if (node is UnresolvedIdentifier) { 2875 } else if (node is UnresolvedIdentifier) {
2876 return node.name.name; 2876 return node.name.name;
2877 } else if (node is TypeDeclarationBuilder) { 2877 } else if (node is TypeDeclarationBuilder) {
2878 return node.name; 2878 return node.name;
2879 } else if (node is PrefixBuilder) { 2879 } else if (node is PrefixBuilder) {
2880 return node.name; 2880 return node.name;
2881 } else if (node is ThisAccessor) { 2881 } else if (node is ThisAccessor) {
2882 return node.isSuper ? "super" : "this"; 2882 return node.isSuper ? "super" : "this";
2883 } else if (node is BuilderAccessor) { 2883 } else if (node is FastaAccessor) {
2884 return node.plainNameForRead; 2884 return node.plainNameForRead;
2885 } else { 2885 } else {
2886 return internalError("Unhandled: ${node.runtimeType}"); 2886 return internalError("Unhandled: ${node.runtimeType}");
2887 } 2887 }
2888 } 2888 }
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/builder_accessors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698