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 12044 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12055 } | 12055 } |
12056 | 12056 |
12057 | 12057 |
12058 RawInstance* Parser::TryCanonicalize(const Instance& instance, | 12058 RawInstance* Parser::TryCanonicalize(const Instance& instance, |
12059 TokenPosition token_pos) { | 12059 TokenPosition token_pos) { |
12060 if (instance.IsNull()) { | 12060 if (instance.IsNull()) { |
12061 return instance.raw(); | 12061 return instance.raw(); |
12062 } | 12062 } |
12063 const char* error_str = NULL; | 12063 const char* error_str = NULL; |
12064 Instance& result = | 12064 Instance& result = |
12065 Instance::Handle(Z, instance.CheckAndCanonicalize(thread(), &error_str)); | 12065 Instance::Handle(Z, instance.CheckAndCanonicalize(&error_str)); |
12066 if (result.IsNull()) { | 12066 if (result.IsNull()) { |
12067 ReportError(token_pos, "Invalid const object %s", error_str); | 12067 ReportError(token_pos, "Invalid const object %s", error_str); |
12068 } | 12068 } |
12069 return result.raw(); | 12069 return result.raw(); |
12070 } | 12070 } |
12071 | 12071 |
12072 | 12072 |
12073 // If the field is already initialized, return no ast (NULL). | 12073 // If the field is already initialized, return no ast (NULL). |
12074 // Otherwise, if the field is constant, initialize the field and return no ast. | 12074 // Otherwise, if the field is constant, initialize the field and return no ast. |
12075 // If the field is not initialized and not const, return the ast for the getter. | 12075 // If the field is not initialized and not const, return the ast for the getter. |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12740 } else if (CurrentToken() != Token::kRBRACK) { | 12740 } else if (CurrentToken() != Token::kRBRACK) { |
12741 ReportError("comma or ']' expected"); | 12741 ReportError("comma or ']' expected"); |
12742 } | 12742 } |
12743 } | 12743 } |
12744 ExpectToken(Token::kRBRACK); | 12744 ExpectToken(Token::kRBRACK); |
12745 SetAllowFunctionLiterals(saved_mode); | 12745 SetAllowFunctionLiterals(saved_mode); |
12746 } | 12746 } |
12747 | 12747 |
12748 if (is_const) { | 12748 if (is_const) { |
12749 // Allocate and initialize the const list at compile time. | 12749 // Allocate and initialize the const list at compile time. |
12750 if ((element_list.length() == 0) && list_type_arguments.IsNull()) { | |
12751 return new(Z) LiteralNode(literal_pos, Object::empty_array()); | |
12752 } | |
12753 Array& const_list = Array::ZoneHandle(Z, | 12750 Array& const_list = Array::ZoneHandle(Z, |
12754 Array::New(element_list.length(), Heap::kOld)); | 12751 Array::New(element_list.length(), Heap::kOld)); |
12755 const_list.SetTypeArguments( | 12752 const_list.SetTypeArguments( |
12756 TypeArguments::Handle(Z, list_type_arguments.Canonicalize())); | 12753 TypeArguments::Handle(Z, list_type_arguments.Canonicalize())); |
12757 Error& bound_error = Error::Handle(Z); | 12754 Error& bound_error = Error::Handle(Z); |
12758 for (int i = 0; i < element_list.length(); i++) { | 12755 for (int i = 0; i < element_list.length(); i++) { |
12759 AstNode* elem = element_list[i]; | 12756 AstNode* elem = element_list[i]; |
12760 // Arguments have been evaluated to a literal value already. | 12757 // Arguments have been evaluated to a literal value already. |
12761 ASSERT(elem->IsLiteralNode()); | 12758 ASSERT(elem->IsLiteralNode()); |
12762 ASSERT(!is_top_level_); // We cannot check unresolved types. | 12759 ASSERT(!is_top_level_); // We cannot check unresolved types. |
(...skipping 1719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14482 const ArgumentListNode& function_args, | 14479 const ArgumentListNode& function_args, |
14483 const LocalVariable* temp_for_last_arg, | 14480 const LocalVariable* temp_for_last_arg, |
14484 bool is_super_invocation) { | 14481 bool is_super_invocation) { |
14485 UNREACHABLE(); | 14482 UNREACHABLE(); |
14486 return NULL; | 14483 return NULL; |
14487 } | 14484 } |
14488 | 14485 |
14489 } // namespace dart | 14486 } // namespace dart |
14490 | 14487 |
14491 #endif // DART_PRECOMPILED_RUNTIME | 14488 #endif // DART_PRECOMPILED_RUNTIME |
OLD | NEW |