| OLD | NEW |
| 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 FastaMessage, codeExpectedButGot, codeExpectedFunctionBody; | 8 show FastaMessage, codeExpectedButGot, codeExpectedFunctionBody; |
| 9 | 9 |
| 10 import '../parser/parser.dart' show FormalParameterType, MemberKind, optional; | 10 import '../parser/parser.dart' show FormalParameterType, MemberKind, optional; |
| (...skipping 729 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 push(new KernelLogicalExpression(receiver, token.stringValue, argument)); | 740 push(new KernelLogicalExpression(receiver, token.stringValue, argument)); |
| 741 } | 741 } |
| 742 | 742 |
| 743 /// Handle `a ?? b`. | 743 /// Handle `a ?? b`. |
| 744 void doIfNull(Token token) { | 744 void doIfNull(Token token) { |
| 745 Expression b = popForValue(); | 745 Expression b = popForValue(); |
| 746 Expression a = popForValue(); | 746 Expression a = popForValue(); |
| 747 VariableDeclaration variable = new VariableDeclaration.forValue(a); | 747 VariableDeclaration variable = new VariableDeclaration.forValue(a); |
| 748 push(makeLet( | 748 push(makeLet( |
| 749 variable, | 749 variable, |
| 750 new ConditionalExpression(buildIsNull(new VariableGet(variable)), b, | 750 new KernelConditionalExpression(buildIsNull(new VariableGet(variable)), |
| 751 new VariableGet(variable), const DynamicType()))); | 751 b, new VariableGet(variable)))); |
| 752 } | 752 } |
| 753 | 753 |
| 754 /// Handle `a?.b(...)`. | 754 /// Handle `a?.b(...)`. |
| 755 void doIfNotNull(Token token) { | 755 void doIfNotNull(Token token) { |
| 756 IncompleteSend send = pop(); | 756 IncompleteSend send = pop(); |
| 757 push(send.withReceiver(pop(), token.charOffset, isNullAware: true)); | 757 push(send.withReceiver(pop(), token.charOffset, isNullAware: true)); |
| 758 } | 758 } |
| 759 | 759 |
| 760 void doDotOrCascadeExpression(Token token) { | 760 void doDotOrCascadeExpression(Token token) { |
| 761 // TODO(ahe): Handle null-aware. | 761 // TODO(ahe): Handle null-aware. |
| (...skipping 2090 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2852 {bool isConstantExpression: false, | 2852 {bool isConstantExpression: false, |
| 2853 bool isNullAware: false, | 2853 bool isNullAware: false, |
| 2854 bool isImplicitCall: false}) { | 2854 bool isImplicitCall: false}) { |
| 2855 if (constantExpressionRequired && !isConstantExpression) { | 2855 if (constantExpressionRequired && !isConstantExpression) { |
| 2856 return buildCompileTimeError("Not a constant expression.", offset); | 2856 return buildCompileTimeError("Not a constant expression.", offset); |
| 2857 } | 2857 } |
| 2858 if (isNullAware) { | 2858 if (isNullAware) { |
| 2859 VariableDeclaration variable = new VariableDeclaration.forValue(receiver); | 2859 VariableDeclaration variable = new VariableDeclaration.forValue(receiver); |
| 2860 return makeLet( | 2860 return makeLet( |
| 2861 variable, | 2861 variable, |
| 2862 new ConditionalExpression( | 2862 new KernelConditionalExpression( |
| 2863 buildIsNull(new VariableGet(variable)), | 2863 buildIsNull(new VariableGet(variable)), |
| 2864 new NullLiteral(), | 2864 new NullLiteral(), |
| 2865 new MethodInvocation(new VariableGet(variable), name, arguments) | 2865 new MethodInvocation(new VariableGet(variable), name, arguments) |
| 2866 ..fileOffset = offset, | 2866 ..fileOffset = offset)); |
| 2867 const DynamicType())); | |
| 2868 } else { | 2867 } else { |
| 2869 return new KernelMethodInvocation(receiver, name, arguments, | 2868 return new KernelMethodInvocation(receiver, name, arguments, |
| 2870 isImplicitCall: isImplicitCall) | 2869 isImplicitCall: isImplicitCall) |
| 2871 ..fileOffset = offset; | 2870 ..fileOffset = offset; |
| 2872 } | 2871 } |
| 2873 } | 2872 } |
| 2874 | 2873 |
| 2875 @override | 2874 @override |
| 2876 void addCompileTimeErrorFromMessage(FastaMessage message) { | 2875 void addCompileTimeErrorFromMessage(FastaMessage message) { |
| 2877 library.addCompileTimeError(message.charOffset, message.message, | 2876 library.addCompileTimeError(message.charOffset, message.message, |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3330 if (starToken == null) { | 3329 if (starToken == null) { |
| 3331 return AsyncMarker.Async; | 3330 return AsyncMarker.Async; |
| 3332 } else { | 3331 } else { |
| 3333 assert(identical(starToken.stringValue, "*")); | 3332 assert(identical(starToken.stringValue, "*")); |
| 3334 return AsyncMarker.AsyncStar; | 3333 return AsyncMarker.AsyncStar; |
| 3335 } | 3334 } |
| 3336 } else { | 3335 } else { |
| 3337 return internalError("Unknown async modifier: $asyncToken"); | 3336 return internalError("Unknown async modifier: $asyncToken"); |
| 3338 } | 3337 } |
| 3339 } | 3338 } |
| OLD | NEW |