| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 #include "vm/parser.h" | 5 #include "vm/parser.h" |
| 6 #include "vm/flags.h" | 6 #include "vm/flags.h" |
| 7 | 7 |
| 8 #ifndef DART_PRECOMPILED_RUNTIME | 8 #ifndef DART_PRECOMPILED_RUNTIME |
| 9 | 9 |
| 10 #include "lib/invocation_mirror.h" | 10 #include "lib/invocation_mirror.h" |
| (...skipping 5413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5424 TokenPosition void_pos = TokenPos(); | 5424 TokenPosition void_pos = TokenPos(); |
| 5425 ConsumeToken(); | 5425 ConsumeToken(); |
| 5426 // 'void' is always allowed as result type of a function type. | 5426 // 'void' is always allowed as result type of a function type. |
| 5427 if (!allow_void && !IsFunctionTypeSymbol()) { | 5427 if (!allow_void && !IsFunctionTypeSymbol()) { |
| 5428 ReportError(void_pos, "'void' not allowed here"); | 5428 ReportError(void_pos, "'void' not allowed here"); |
| 5429 } | 5429 } |
| 5430 } else if (!IsFunctionTypeSymbol()) { | 5430 } else if (!IsFunctionTypeSymbol()) { |
| 5431 // Including 'Function' not followed by '(' or '<'. | 5431 // Including 'Function' not followed by '(' or '<'. |
| 5432 SkipType(false); | 5432 SkipType(false); |
| 5433 } | 5433 } |
| 5434 while (IsSymbol(Symbols::Function())) { | 5434 while (IsFunctionTypeSymbol()) { |
| 5435 ConsumeToken(); | 5435 ConsumeToken(); |
| 5436 SkipTypeArguments(); | 5436 SkipTypeArguments(); |
| 5437 if (CurrentToken() == Token::kLPAREN) { | 5437 if (CurrentToken() == Token::kLPAREN) { |
| 5438 SkipToMatchingParenthesis(); | 5438 SkipToMatchingParenthesis(); |
| 5439 } else { | 5439 } else { |
| 5440 ReportError("'(' expected"); | 5440 ReportError("'(' expected"); |
| 5441 } | 5441 } |
| 5442 } | 5442 } |
| 5443 } | 5443 } |
| 5444 | 5444 |
| (...skipping 2780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8225 } else if ((CurrentToken() == Token::kIDENT) && !IsFunctionTypeSymbol()) { | 8225 } else if ((CurrentToken() == Token::kIDENT) && !IsFunctionTypeSymbol()) { |
| 8226 // 'Function' not followed by '(' or '<' means the Function class. | 8226 // 'Function' not followed by '(' or '<' means the Function class. |
| 8227 if (!TryParseQualIdent()) { | 8227 if (!TryParseQualIdent()) { |
| 8228 return false; | 8228 return false; |
| 8229 } | 8229 } |
| 8230 if ((CurrentToken() == Token::kLT) && !TryParseTypeParameters()) { | 8230 if ((CurrentToken() == Token::kLT) && !TryParseTypeParameters()) { |
| 8231 return false; | 8231 return false; |
| 8232 } | 8232 } |
| 8233 found = true; | 8233 found = true; |
| 8234 } | 8234 } |
| 8235 while (IsSymbol(Symbols::Function())) { | 8235 while (IsFunctionTypeSymbol()) { |
| 8236 ConsumeToken(); | 8236 ConsumeToken(); |
| 8237 if ((CurrentToken() == Token::kLT) && !TryParseTypeParameters()) { | 8237 if ((CurrentToken() == Token::kLT) && !TryParseTypeParameters()) { |
| 8238 return false; | 8238 return false; |
| 8239 } | 8239 } |
| 8240 if (CurrentToken() == Token::kLPAREN) { | 8240 if (CurrentToken() == Token::kLPAREN) { |
| 8241 SkipToMatchingParenthesis(); | 8241 SkipToMatchingParenthesis(); |
| 8242 } else { | 8242 } else { |
| 8243 return false; | 8243 return false; |
| 8244 } | 8244 } |
| 8245 found = true; | 8245 found = true; |
| (...skipping 4735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12981 // 'void' is always allowed as result type of a function type. | 12981 // 'void' is always allowed as result type of a function type. |
| 12982 if (!allow_void && !IsFunctionTypeSymbol()) { | 12982 if (!allow_void && !IsFunctionTypeSymbol()) { |
| 12983 ReportError(void_pos, "'void' not allowed here"); | 12983 ReportError(void_pos, "'void' not allowed here"); |
| 12984 } | 12984 } |
| 12985 } else if (!IsFunctionTypeSymbol()) { | 12985 } else if (!IsFunctionTypeSymbol()) { |
| 12986 // Including 'Function' not followed by '(' or '<'. | 12986 // Including 'Function' not followed by '(' or '<'. |
| 12987 // It is too early to resolve the type here, since it can | 12987 // It is too early to resolve the type here, since it can |
| 12988 // refer to a not yet declared function type parameter. | 12988 // refer to a not yet declared function type parameter. |
| 12989 type = ParseType(ClassFinalizer::kDoNotResolve); | 12989 type = ParseType(ClassFinalizer::kDoNotResolve); |
| 12990 } | 12990 } |
| 12991 while (IsSymbol(Symbols::Function())) { | 12991 while (IsFunctionTypeSymbol()) { |
| 12992 if (type.IsNull()) { | 12992 if (type.IsNull()) { |
| 12993 type = Type::DynamicType(); | 12993 type = Type::DynamicType(); |
| 12994 } | 12994 } |
| 12995 // 'type' is the result type of the function type. | 12995 // 'type' is the result type of the function type. |
| 12996 type = ParseFunctionType(type, ClassFinalizer::kDoNotResolve); | 12996 type = ParseFunctionType(type, ClassFinalizer::kDoNotResolve); |
| 12997 } | 12997 } |
| 12998 // At this point, all type parameters have been parsed, resolve the type. | 12998 // At this point, all type parameters have been parsed, resolve the type. |
| 12999 if (finalization == ClassFinalizer::kIgnore) { | 12999 if (finalization == ClassFinalizer::kIgnore) { |
| 13000 return Type::DynamicType(); | 13000 return Type::DynamicType(); |
| 13001 } | 13001 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13059 | 13059 |
| 13060 const bool use_function_type_syntax = true; | 13060 const bool use_function_type_syntax = true; |
| 13061 const bool allow_explicit_default_values = false; | 13061 const bool allow_explicit_default_values = false; |
| 13062 const bool evaluate_metadata = false; | 13062 const bool evaluate_metadata = false; |
| 13063 ParseFormalParameterList(use_function_type_syntax, | 13063 ParseFormalParameterList(use_function_type_syntax, |
| 13064 allow_explicit_default_values, evaluate_metadata, | 13064 allow_explicit_default_values, evaluate_metadata, |
| 13065 ¶ms); | 13065 ¶ms); |
| 13066 AddFormalParamsToFunction(¶ms, signature_function); | 13066 AddFormalParamsToFunction(¶ms, signature_function); |
| 13067 innermost_function_ = innermost_function_.parent_function(); | 13067 innermost_function_ = innermost_function_.parent_function(); |
| 13068 type = signature_function.SignatureType(); | 13068 type = signature_function.SignatureType(); |
| 13069 } while (IsSymbol(Symbols::Function())); | 13069 } while (IsFunctionTypeSymbol()); |
| 13070 // At this point, all type parameters have been parsed, resolve the type. | 13070 // At this point, all type parameters have been parsed, resolve the type. |
| 13071 if (finalization == ClassFinalizer::kIgnore) { | 13071 if (finalization == ClassFinalizer::kIgnore) { |
| 13072 return Type::DynamicType(); | 13072 return Type::DynamicType(); |
| 13073 } | 13073 } |
| 13074 if (finalization >= ClassFinalizer::kResolveTypeParameters) { | 13074 if (finalization >= ClassFinalizer::kResolveTypeParameters) { |
| 13075 ResolveType(finalization, &type); | 13075 ResolveType(finalization, &type); |
| 13076 if (finalization >= ClassFinalizer::kCanonicalize) { | 13076 if (finalization >= ClassFinalizer::kCanonicalize) { |
| 13077 type ^= ClassFinalizer::FinalizeType(current_class(), type, finalization); | 13077 type ^= ClassFinalizer::FinalizeType(current_class(), type, finalization); |
| 13078 } | 13078 } |
| 13079 } | 13079 } |
| (...skipping 1956 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15036 const ArgumentListNode& function_args, | 15036 const ArgumentListNode& function_args, |
| 15037 const LocalVariable* temp_for_last_arg, | 15037 const LocalVariable* temp_for_last_arg, |
| 15038 bool is_super_invocation) { | 15038 bool is_super_invocation) { |
| 15039 UNREACHABLE(); | 15039 UNREACHABLE(); |
| 15040 return NULL; | 15040 return NULL; |
| 15041 } | 15041 } |
| 15042 | 15042 |
| 15043 } // namespace dart | 15043 } // namespace dart |
| 15044 | 15044 |
| 15045 #endif // DART_PRECOMPILED_RUNTIME | 15045 #endif // DART_PRECOMPILED_RUNTIME |
| OLD | NEW |