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

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

Issue 2953503002: Only set types of conditional expressions in strong mode. (Closed)
Patch Set: Created 3 years, 6 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/frontend_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 '../fasta_codes.dart' 7 import '../fasta_codes.dart'
8 show 8 show
9 FastaMessage, 9 FastaMessage,
10 codeConstFieldWithoutInitializer, 10 codeConstFieldWithoutInitializer,
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after
859 push(new KernelLogicalExpression(receiver, token.stringValue, argument)); 859 push(new KernelLogicalExpression(receiver, token.stringValue, argument));
860 } 860 }
861 861
862 /// Handle `a ?? b`. 862 /// Handle `a ?? b`.
863 void doIfNull(Token token) { 863 void doIfNull(Token token) {
864 Expression b = popForValue(); 864 Expression b = popForValue();
865 Expression a = popForValue(); 865 Expression a = popForValue();
866 VariableDeclaration variable = new VariableDeclaration.forValue(a); 866 VariableDeclaration variable = new VariableDeclaration.forValue(a);
867 push(new KernelIfNullExpression( 867 push(new KernelIfNullExpression(
868 variable, 868 variable,
869 new KernelConditionalExpression( 869 new ConditionalExpression(
870 buildIsNull(new VariableGet(variable), offsetForToken(token)), 870 buildIsNull(new VariableGet(variable), offsetForToken(token)),
871 b, 871 b,
872 new VariableGet(variable)))); 872 new VariableGet(variable),
873 null)));
873 } 874 }
874 875
875 /// Handle `a?.b(...)`. 876 /// Handle `a?.b(...)`.
876 void doIfNotNull(Token token) { 877 void doIfNotNull(Token token) {
877 IncompleteSend send = pop(); 878 IncompleteSend send = pop();
878 push(send.withReceiver(pop(), token.charOffset, isNullAware: true)); 879 push(send.withReceiver(pop(), token.charOffset, isNullAware: true));
879 } 880 }
880 881
881 void doDotOrCascadeExpression(Token token) { 882 void doDotOrCascadeExpression(Token token) {
882 // TODO(ahe): Handle null-aware. 883 // TODO(ahe): Handle null-aware.
(...skipping 2312 matching lines...) Expand 10 before | Expand all | Expand 10 after
3195 } 3196 }
3196 if (isNullAware) { 3197 if (isNullAware) {
3197 VariableDeclaration variable = new VariableDeclaration.forValue(receiver); 3198 VariableDeclaration variable = new VariableDeclaration.forValue(receiver);
3198 return new KernelNullAwareMethodInvocation( 3199 return new KernelNullAwareMethodInvocation(
3199 variable, 3200 variable,
3200 new ConditionalExpression( 3201 new ConditionalExpression(
3201 buildIsNull(new VariableGet(variable), offset), 3202 buildIsNull(new VariableGet(variable), offset),
3202 new NullLiteral(), 3203 new NullLiteral(),
3203 new MethodInvocation(new VariableGet(variable), name, arguments) 3204 new MethodInvocation(new VariableGet(variable), name, arguments)
3204 ..fileOffset = offset, 3205 ..fileOffset = offset,
3205 const DynamicType()) 3206 null)
3206 ..fileOffset = offset) 3207 ..fileOffset = offset)
3207 ..fileOffset = offset; 3208 ..fileOffset = offset;
3208 } else { 3209 } else {
3209 return new KernelMethodInvocation(receiver, name, arguments, 3210 return new KernelMethodInvocation(receiver, name, arguments,
3210 isImplicitCall: isImplicitCall) 3211 isImplicitCall: isImplicitCall)
3211 ..fileOffset = offset; 3212 ..fileOffset = offset;
3212 } 3213 }
3213 } 3214 }
3214 3215
3215 @override 3216 @override
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
3673 if (starToken == null) { 3674 if (starToken == null) {
3674 return AsyncMarker.Async; 3675 return AsyncMarker.Async;
3675 } else { 3676 } else {
3676 assert(identical(starToken.stringValue, "*")); 3677 assert(identical(starToken.stringValue, "*"));
3677 return AsyncMarker.AsyncStar; 3678 return AsyncMarker.AsyncStar;
3678 } 3679 }
3679 } else { 3680 } else {
3680 return internalError("Unknown async modifier: $asyncToken"); 3681 return internalError("Unknown async modifier: $asyncToken");
3681 } 3682 }
3682 } 3683 }
OLDNEW
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698