| 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 | 6 |
| 7 #include "lib/invocation_mirror.h" | 7 #include "lib/invocation_mirror.h" |
| 8 #include "platform/utils.h" | 8 #include "platform/utils.h" |
| 9 #include "vm/bootstrap.h" | 9 #include "vm/bootstrap.h" |
| 10 #include "vm/class_finalizer.h" | 10 #include "vm/class_finalizer.h" |
| (...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 const Array& param_descriptor = | 736 const Array& param_descriptor = |
| 737 Array::Handle(Array::New(param_cnt * kParameterEntrySize)); | 737 Array::Handle(Array::New(param_cnt * kParameterEntrySize)); |
| 738 for (int i = 0, j = 0; i < param_cnt; i++, j += kParameterEntrySize) { | 738 for (int i = 0, j = 0; i < param_cnt; i++, j += kParameterEntrySize) { |
| 739 param_descriptor.SetAt(j + kParameterIsFinalOffset, | 739 param_descriptor.SetAt(j + kParameterIsFinalOffset, |
| 740 param[i].is_final ? Bool::True() : Bool::False()); | 740 param[i].is_final ? Bool::True() : Bool::False()); |
| 741 param_descriptor.SetAt(j + kParameterDefaultValueOffset, | 741 param_descriptor.SetAt(j + kParameterDefaultValueOffset, |
| 742 (param[i].default_value == NULL) ? Object::null_instance() : | 742 (param[i].default_value == NULL) ? Object::null_instance() : |
| 743 *(param[i].default_value)); | 743 *(param[i].default_value)); |
| 744 const Object* metadata = param[i].metadata; | 744 const Object* metadata = param[i].metadata; |
| 745 if ((metadata != NULL) && (*metadata).IsError()) { | 745 if ((metadata != NULL) && (*metadata).IsError()) { |
| 746 return (*metadata).raw(); // Error evaluating the metadata. | 746 isolate->set_long_jump_base(base); |
| 747 return metadata->raw(); // Error evaluating the metadata. |
| 747 } | 748 } |
| 748 param_descriptor.SetAt(j + kParameterMetadataOffset, | 749 param_descriptor.SetAt(j + kParameterMetadataOffset, |
| 749 (param[i].metadata == NULL) ? Object::null_instance() : | 750 (param[i].metadata == NULL) ? Object::null_instance() : |
| 750 *(param[i].metadata)); | 751 *(param[i].metadata)); |
| 751 } | 752 } |
| 752 isolate->set_long_jump_base(base); | 753 isolate->set_long_jump_base(base); |
| 753 return param_descriptor.raw(); | 754 return param_descriptor.raw(); |
| 754 } else { | 755 } else { |
| 755 Error& error = Error::Handle(); | 756 Error& error = Error::Handle(); |
| 756 error = isolate->object_store()->sticky_error(); | 757 error = isolate->object_store()->sticky_error(); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 857 StackZone zone(isolate); | 858 StackZone zone(isolate); |
| 858 LongJump* base = isolate->long_jump_base(); | 859 LongJump* base = isolate->long_jump_base(); |
| 859 LongJump jump; | 860 LongJump jump; |
| 860 isolate->set_long_jump_base(&jump); | 861 isolate->set_long_jump_base(&jump); |
| 861 if (setjmp(*jump.Set()) == 0) { | 862 if (setjmp(*jump.Set()) == 0) { |
| 862 const Script& script = Script::Handle(cls.script()); | 863 const Script& script = Script::Handle(cls.script()); |
| 863 const Library& lib = Library::Handle(cls.library()); | 864 const Library& lib = Library::Handle(cls.library()); |
| 864 Parser parser(script, lib, token_pos); | 865 Parser parser(script, lib, token_pos); |
| 865 parser.set_current_class(cls); | 866 parser.set_current_class(cls); |
| 866 parser.set_parsing_metadata(true); | 867 parser.set_parsing_metadata(true); |
| 867 return parser.EvaluateMetadata(); | 868 |
| 869 RawObject* metadata = parser.EvaluateMetadata(); |
| 870 isolate->set_long_jump_base(base); |
| 871 return metadata; |
| 868 } else { | 872 } else { |
| 869 Error& error = Error::Handle(); | 873 Error& error = Error::Handle(); |
| 870 error = isolate->object_store()->sticky_error(); | 874 error = isolate->object_store()->sticky_error(); |
| 871 isolate->object_store()->clear_sticky_error(); | 875 isolate->object_store()->clear_sticky_error(); |
| 872 isolate->set_long_jump_base(base); | 876 isolate->set_long_jump_base(base); |
| 873 return error.raw(); | 877 return error.raw(); |
| 874 } | 878 } |
| 875 UNREACHABLE(); | 879 UNREACHABLE(); |
| 876 return Object::null(); | 880 return Object::null(); |
| 877 } | 881 } |
| (...skipping 9875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10753 void Parser::SkipQualIdent() { | 10757 void Parser::SkipQualIdent() { |
| 10754 ASSERT(IsIdentifier()); | 10758 ASSERT(IsIdentifier()); |
| 10755 ConsumeToken(); | 10759 ConsumeToken(); |
| 10756 if (CurrentToken() == Token::kPERIOD) { | 10760 if (CurrentToken() == Token::kPERIOD) { |
| 10757 ConsumeToken(); // Consume the kPERIOD token. | 10761 ConsumeToken(); // Consume the kPERIOD token. |
| 10758 ExpectIdentifier("identifier expected after '.'"); | 10762 ExpectIdentifier("identifier expected after '.'"); |
| 10759 } | 10763 } |
| 10760 } | 10764 } |
| 10761 | 10765 |
| 10762 } // namespace dart | 10766 } // namespace dart |
| OLD | NEW |