| 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 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
| 8 hide InvalidExpression, InvalidInitializer, InvalidStatement; | 8 hide InvalidExpression, InvalidInitializer, InvalidStatement; |
| 9 | 9 |
| 10 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; | 10 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; |
| 11 | 11 |
| 12 import 'package:kernel/clone.dart' show CloneVisitor; | 12 import 'package:kernel/clone.dart' show CloneVisitor; |
| 13 | 13 |
| 14 import 'package:kernel/core_types.dart' show CoreTypes; | 14 import 'package:kernel/core_types.dart' show CoreTypes; |
| 15 | 15 |
| 16 import 'package:kernel/transformations/flags.dart' show TransformerFlag; | 16 import 'package:kernel/transformations/flags.dart' show TransformerFlag; |
| 17 | 17 |
| 18 import '../../scanner/token.dart' show BeginToken, Token; | 18 import '../../scanner/token.dart' show BeginToken, Token; |
| 19 | 19 |
| 20 import '../fasta_codes.dart' as fasta; | 20 import '../fasta_codes.dart' as fasta; |
| 21 | 21 |
| 22 import '../fasta_codes.dart' show LocatedMessage, Message; | 22 import '../fasta_codes.dart' show LocatedMessage, Message; |
| 23 | 23 |
| 24 import '../messages.dart' as messages show getLocationFromUri; | 24 import '../messages.dart' as messages show getLocationFromUri; |
| 25 | 25 |
| 26 import '../modifier.dart' show Modifier, constMask, finalMask; | 26 import '../modifier.dart' show Modifier, constMask, finalMask; |
| 27 | 27 |
| 28 import '../parser/identifier_context.dart' show IdentifierContext; | |
| 29 | |
| 30 import '../parser/native_support.dart' show skipNativeClause; | 28 import '../parser/native_support.dart' show skipNativeClause; |
| 31 | 29 |
| 32 import '../parser/parser.dart' | 30 import '../parser.dart' |
| 33 show Assert, FormalParameterType, MemberKind, optional; | 31 show Assert, FormalParameterKind, IdentifierContext, MemberKind, optional; |
| 32 |
| 33 import '../parser/formal_parameter_kind.dart' |
| 34 show isOptionalPositionalFormalParameterKind; |
| 34 | 35 |
| 35 import '../problems.dart' | 36 import '../problems.dart' |
| 36 show internalProblem, unexpected, unhandled, unsupported; | 37 show internalProblem, unexpected, unhandled, unsupported; |
| 37 | 38 |
| 38 import '../quote.dart' | 39 import '../quote.dart' |
| 39 show | 40 show |
| 40 Quote, | 41 Quote, |
| 41 analyzeQuote, | 42 analyzeQuote, |
| 42 unescape, | 43 unescape, |
| 43 unescapeFirstStringPart, | 44 unescapeFirstStringPart, |
| (...skipping 1761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1805 push(deprecated_buildCompileTimeError( | 1806 push(deprecated_buildCompileTimeError( |
| 1806 "Not a constant expression.", throwToken.charOffset)); | 1807 "Not a constant expression.", throwToken.charOffset)); |
| 1807 } else { | 1808 } else { |
| 1808 push( | 1809 push( |
| 1809 new KernelThrow(expression)..fileOffset = offsetForToken(throwToken)); | 1810 new KernelThrow(expression)..fileOffset = offsetForToken(throwToken)); |
| 1810 } | 1811 } |
| 1811 } | 1812 } |
| 1812 | 1813 |
| 1813 @override | 1814 @override |
| 1814 void endFormalParameter(Token thisKeyword, Token nameToken, | 1815 void endFormalParameter(Token thisKeyword, Token nameToken, |
| 1815 FormalParameterType kind, MemberKind memberKind) { | 1816 FormalParameterKind kind, MemberKind memberKind) { |
| 1816 debugEvent("FormalParameter"); | 1817 debugEvent("FormalParameter"); |
| 1817 if (thisKeyword != null) { | 1818 if (thisKeyword != null) { |
| 1818 if (!inConstructor) { | 1819 if (!inConstructor) { |
| 1819 deprecated_addCompileTimeError(thisKeyword.charOffset, | 1820 deprecated_addCompileTimeError(thisKeyword.charOffset, |
| 1820 "'this' parameters can only be used on constructors."); | 1821 "'this' parameters can only be used on constructors."); |
| 1821 thisKeyword = null; | 1822 thisKeyword = null; |
| 1822 } | 1823 } |
| 1823 } | 1824 } |
| 1824 Identifier name = pop(); | 1825 Identifier name = pop(); |
| 1825 DartType type = pop(); | 1826 DartType type = pop(); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1857 variable.fileOffset = offsetForToken(name.token); | 1858 variable.fileOffset = offsetForToken(name.token); |
| 1858 } | 1859 } |
| 1859 } | 1860 } |
| 1860 push(variable); | 1861 push(variable); |
| 1861 } | 1862 } |
| 1862 | 1863 |
| 1863 @override | 1864 @override |
| 1864 void endOptionalFormalParameters( | 1865 void endOptionalFormalParameters( |
| 1865 int count, Token beginToken, Token endToken) { | 1866 int count, Token beginToken, Token endToken) { |
| 1866 debugEvent("OptionalFormalParameters"); | 1867 debugEvent("OptionalFormalParameters"); |
| 1867 FormalParameterType kind = optional("{", beginToken) | 1868 FormalParameterKind kind = optional("{", beginToken) |
| 1868 ? FormalParameterType.NAMED | 1869 ? FormalParameterKind.optionalNamed |
| 1869 : FormalParameterType.POSITIONAL; | 1870 : FormalParameterKind.optionalPositional; |
| 1870 push(new OptionalFormals(kind, popList(count) ?? [])); | 1871 push(new OptionalFormals(kind, popList(count) ?? [])); |
| 1871 } | 1872 } |
| 1872 | 1873 |
| 1873 @override | 1874 @override |
| 1874 void beginFunctionTypedFormalParameter(Token token) { | 1875 void beginFunctionTypedFormalParameter(Token token) { |
| 1875 debugEvent("beginFunctionTypedFormalParameter"); | 1876 debugEvent("beginFunctionTypedFormalParameter"); |
| 1876 functionNestingLevel++; | 1877 functionNestingLevel++; |
| 1877 enterFunctionTypeScope(); | 1878 enterFunctionTypeScope(); |
| 1878 } | 1879 } |
| 1879 | 1880 |
| (...skipping 1766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3646 | 3647 |
| 3647 void resolveGotos(SwitchCase target) { | 3648 void resolveGotos(SwitchCase target) { |
| 3648 unsupported("resolveGotos", charOffset, fileUri); | 3649 unsupported("resolveGotos", charOffset, fileUri); |
| 3649 } | 3650 } |
| 3650 | 3651 |
| 3651 @override | 3652 @override |
| 3652 String get fullNameForErrors => "<label-target>"; | 3653 String get fullNameForErrors => "<label-target>"; |
| 3653 } | 3654 } |
| 3654 | 3655 |
| 3655 class OptionalFormals { | 3656 class OptionalFormals { |
| 3656 final FormalParameterType kind; | 3657 final FormalParameterKind kind; |
| 3657 | 3658 |
| 3658 final List<VariableDeclaration> formals; | 3659 final List<VariableDeclaration> formals; |
| 3659 | 3660 |
| 3660 OptionalFormals(this.kind, this.formals); | 3661 OptionalFormals(this.kind, this.formals); |
| 3661 } | 3662 } |
| 3662 | 3663 |
| 3663 class FormalParameters { | 3664 class FormalParameters { |
| 3664 final List<VariableDeclaration> required; | 3665 final List<VariableDeclaration> required; |
| 3665 final OptionalFormals optional; | 3666 final OptionalFormals optional; |
| 3666 final int charOffset; | 3667 final int charOffset; |
| 3667 | 3668 |
| 3668 FormalParameters(this.required, this.optional, this.charOffset); | 3669 FormalParameters(this.required, this.optional, this.charOffset); |
| 3669 | 3670 |
| 3670 FunctionNode addToFunction(FunctionNode function) { | 3671 FunctionNode addToFunction(FunctionNode function) { |
| 3671 function.requiredParameterCount = required.length; | 3672 function.requiredParameterCount = required.length; |
| 3672 function.positionalParameters.addAll(required); | 3673 function.positionalParameters.addAll(required); |
| 3673 if (optional != null) { | 3674 if (optional != null) { |
| 3674 if (optional.kind.isPositional) { | 3675 if (isOptionalPositionalFormalParameterKind(optional.kind)) { |
| 3675 function.positionalParameters.addAll(optional.formals); | 3676 function.positionalParameters.addAll(optional.formals); |
| 3676 } else { | 3677 } else { |
| 3677 function.namedParameters.addAll(optional.formals); | 3678 function.namedParameters.addAll(optional.formals); |
| 3678 setParents(function.namedParameters, function); | 3679 setParents(function.namedParameters, function); |
| 3679 } | 3680 } |
| 3680 } | 3681 } |
| 3681 setParents(function.positionalParameters, function); | 3682 setParents(function.positionalParameters, function); |
| 3682 return function; | 3683 return function; |
| 3683 } | 3684 } |
| 3684 | 3685 |
| 3685 FunctionType toFunctionType(DartType returnType, | 3686 FunctionType toFunctionType(DartType returnType, |
| 3686 [List<TypeParameter> typeParameters]) { | 3687 [List<TypeParameter> typeParameters]) { |
| 3687 returnType ??= const DynamicType(); | 3688 returnType ??= const DynamicType(); |
| 3688 typeParameters ??= const <TypeParameter>[]; | 3689 typeParameters ??= const <TypeParameter>[]; |
| 3689 int requiredParameterCount = required.length; | 3690 int requiredParameterCount = required.length; |
| 3690 List<DartType> positionalParameters = <DartType>[]; | 3691 List<DartType> positionalParameters = <DartType>[]; |
| 3691 List<NamedType> namedParameters = const <NamedType>[]; | 3692 List<NamedType> namedParameters = const <NamedType>[]; |
| 3692 for (VariableDeclaration parameter in required) { | 3693 for (VariableDeclaration parameter in required) { |
| 3693 positionalParameters.add(parameter.type); | 3694 positionalParameters.add(parameter.type); |
| 3694 } | 3695 } |
| 3695 if (optional != null) { | 3696 if (optional != null) { |
| 3696 if (optional.kind.isPositional) { | 3697 if (isOptionalPositionalFormalParameterKind(optional.kind)) { |
| 3697 for (VariableDeclaration parameter in optional.formals) { | 3698 for (VariableDeclaration parameter in optional.formals) { |
| 3698 positionalParameters.add(parameter.type); | 3699 positionalParameters.add(parameter.type); |
| 3699 } | 3700 } |
| 3700 } else { | 3701 } else { |
| 3701 namedParameters = <NamedType>[]; | 3702 namedParameters = <NamedType>[]; |
| 3702 for (VariableDeclaration parameter in optional.formals) { | 3703 for (VariableDeclaration parameter in optional.formals) { |
| 3703 namedParameters.add(new NamedType(parameter.name, parameter.type)); | 3704 namedParameters.add(new NamedType(parameter.name, parameter.type)); |
| 3704 } | 3705 } |
| 3705 namedParameters.sort(); | 3706 namedParameters.sort(); |
| 3706 } | 3707 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3788 return AsyncMarker.Async; | 3789 return AsyncMarker.Async; |
| 3789 } else { | 3790 } else { |
| 3790 assert(identical(starToken.stringValue, "*")); | 3791 assert(identical(starToken.stringValue, "*")); |
| 3791 return AsyncMarker.AsyncStar; | 3792 return AsyncMarker.AsyncStar; |
| 3792 } | 3793 } |
| 3793 } else { | 3794 } else { |
| 3794 return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens", | 3795 return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens", |
| 3795 asyncToken.charOffset, null); | 3796 asyncToken.charOffset, null); |
| 3796 } | 3797 } |
| 3797 } | 3798 } |
| OLD | NEW |