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/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/bigint_operations.h" | 10 #include "vm/bigint_operations.h" |
(...skipping 6857 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6868 intptr_t LocalVarDescriptors::Length() const { | 6868 intptr_t LocalVarDescriptors::Length() const { |
6869 return raw_ptr()->length_; | 6869 return raw_ptr()->length_; |
6870 } | 6870 } |
6871 | 6871 |
6872 | 6872 |
6873 intptr_t ExceptionHandlers::Length() const { | 6873 intptr_t ExceptionHandlers::Length() const { |
6874 return raw_ptr()->length_; | 6874 return raw_ptr()->length_; |
6875 } | 6875 } |
6876 | 6876 |
6877 | 6877 |
6878 void ExceptionHandlers::SetHandlerInfo(intptr_t index, | 6878 void ExceptionHandlers::SetHandlerInfo(intptr_t try_index, |
6879 intptr_t try_index, | |
6880 intptr_t outer_try_index, | 6879 intptr_t outer_try_index, |
6881 intptr_t handler_pc) const { | 6880 intptr_t handler_pc) const { |
6882 ASSERT((index >= 0) && (index < Length())); | 6881 ASSERT((try_index >= 0) && (try_index < Length())); |
6883 RawExceptionHandlers::HandlerInfo* info = &raw_ptr()->data_[index]; | 6882 RawExceptionHandlers::HandlerInfo* info = &raw_ptr()->data_[try_index]; |
6884 info->try_index = try_index; | |
6885 info->outer_try_index = outer_try_index; | 6883 info->outer_try_index = outer_try_index; |
6886 info->handler_pc = handler_pc; | 6884 info->handler_pc = handler_pc; |
6887 } | 6885 } |
6888 | 6886 |
6889 void ExceptionHandlers::GetHandlerInfo( | 6887 void ExceptionHandlers::GetHandlerInfo( |
6890 intptr_t index, | 6888 intptr_t try_index, |
6891 RawExceptionHandlers::HandlerInfo* info) const { | 6889 RawExceptionHandlers::HandlerInfo* info) const { |
6892 ASSERT((index >= 0) && (index < Length())); | 6890 ASSERT((try_index >= 0) && (try_index < Length())); |
6893 ASSERT(info != NULL); | 6891 ASSERT(info != NULL); |
6894 RawExceptionHandlers::HandlerInfo* data = &raw_ptr()->data_[index]; | 6892 RawExceptionHandlers::HandlerInfo* data = &raw_ptr()->data_[try_index]; |
6895 info->try_index = data->try_index; | |
6896 info->outer_try_index = data->outer_try_index; | 6893 info->outer_try_index = data->outer_try_index; |
6897 info->handler_pc = data->handler_pc; | 6894 info->handler_pc = data->handler_pc; |
6898 } | 6895 } |
6899 | 6896 |
6900 | 6897 |
6901 intptr_t ExceptionHandlers::TryIndex(intptr_t index) const { | 6898 intptr_t ExceptionHandlers::HandlerPC(intptr_t try_index) const { |
6902 ASSERT((index >= 0) && (index < Length())); | 6899 ASSERT((try_index >= 0) && (try_index < Length())); |
6903 return raw_ptr()->data_[index].try_index; | 6900 return raw_ptr()->data_[try_index].handler_pc; |
6904 } | 6901 } |
6905 | 6902 |
6906 | 6903 |
6907 intptr_t ExceptionHandlers::HandlerPC(intptr_t index) const { | 6904 intptr_t ExceptionHandlers::OuterTryIndex(intptr_t try_index) const { |
6908 ASSERT((index >= 0) && (index < Length())); | 6905 ASSERT((try_index >= 0) && (try_index < Length())); |
6909 return raw_ptr()->data_[index].handler_pc; | 6906 return raw_ptr()->data_[try_index].outer_try_index; |
6910 } | 6907 } |
6911 | 6908 |
6912 | 6909 |
6913 intptr_t ExceptionHandlers::OuterTryIndex(intptr_t index) const { | 6910 void ExceptionHandlers::SetHandledTypes(intptr_t try_index, |
6914 ASSERT((index >= 0) && (index < Length())); | 6911 const Array& handled_types) const { |
6915 return raw_ptr()->data_[index].outer_try_index; | 6912 ASSERT((try_index >= 0) && (try_index < Length())); |
| 6913 const Array& handled_types_data = |
| 6914 Array::Handle(raw_ptr()->handled_types_data_); |
| 6915 handled_types_data.SetAt(try_index, handled_types); |
6916 } | 6916 } |
6917 | 6917 |
6918 | 6918 |
6919 void ExceptionHandlers::SetHandledTypes(intptr_t index, | 6919 RawArray* ExceptionHandlers::GetHandledTypes(intptr_t try_index) const { |
6920 const Array& handled_types) const { | 6920 ASSERT((try_index >= 0) && (try_index < Length())); |
6921 ASSERT((index >= 0) && (index < Length())); | |
6922 const Array& handled_types_data = | |
6923 Array::Handle(raw_ptr()->handled_types_data_); | |
6924 handled_types_data.SetAt(index, handled_types); | |
6925 } | |
6926 | |
6927 | |
6928 RawArray* ExceptionHandlers::GetHandledTypes(intptr_t index) const { | |
6929 ASSERT((index >= 0) && (index < Length())); | |
6930 Array& array = Array::Handle(raw_ptr()->handled_types_data_); | 6921 Array& array = Array::Handle(raw_ptr()->handled_types_data_); |
6931 array ^= array.At(index); | 6922 array ^= array.At(try_index); |
6932 return array.raw(); | 6923 return array.raw(); |
6933 } | 6924 } |
6934 | 6925 |
6935 | 6926 |
6936 void ExceptionHandlers::set_handled_types_data(const Array& value) const { | 6927 void ExceptionHandlers::set_handled_types_data(const Array& value) const { |
6937 StorePointer(&raw_ptr()->handled_types_data_, value.raw()); | 6928 StorePointer(&raw_ptr()->handled_types_data_, value.raw()); |
6938 } | 6929 } |
6939 | 6930 |
6940 | 6931 |
6941 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) { | 6932 RawExceptionHandlers* ExceptionHandlers::New(intptr_t num_handlers) { |
(...skipping 29 matching lines...) Expand all Loading... |
6971 // First compute the buffer size required. | 6962 // First compute the buffer size required. |
6972 const char* kFormat = "%"Pd" => %#"Px" (%"Pd" types) (outer %"Pd")\n"; | 6963 const char* kFormat = "%"Pd" => %#"Px" (%"Pd" types) (outer %"Pd")\n"; |
6973 const char* kFormat2 = " %d. %s\n"; | 6964 const char* kFormat2 = " %d. %s\n"; |
6974 intptr_t len = 1; // Trailing '\0'. | 6965 intptr_t len = 1; // Trailing '\0'. |
6975 for (intptr_t i = 0; i < Length(); i++) { | 6966 for (intptr_t i = 0; i < Length(); i++) { |
6976 GetHandlerInfo(i, &info); | 6967 GetHandlerInfo(i, &info); |
6977 handled_types = GetHandledTypes(i); | 6968 handled_types = GetHandledTypes(i); |
6978 ASSERT(!handled_types.IsNull()); | 6969 ASSERT(!handled_types.IsNull()); |
6979 intptr_t num_types = handled_types.Length(); | 6970 intptr_t num_types = handled_types.Length(); |
6980 len += OS::SNPrint(NULL, 0, kFormat, | 6971 len += OS::SNPrint(NULL, 0, kFormat, |
6981 info.try_index, | 6972 i, |
6982 info.handler_pc, | 6973 info.handler_pc, |
6983 num_types, | 6974 num_types, |
6984 info.outer_try_index); | 6975 info.outer_try_index); |
6985 for (int k = 0; k < num_types; k++) { | 6976 for (int k = 0; k < num_types; k++) { |
6986 type ^= handled_types.At(k); | 6977 type ^= handled_types.At(k); |
6987 ASSERT(!type.IsNull()); | 6978 ASSERT(!type.IsNull()); |
6988 len += OS::SNPrint(NULL, 0, kFormat2, k, type.ToCString()); | 6979 len += OS::SNPrint(NULL, 0, kFormat2, k, type.ToCString()); |
6989 } | 6980 } |
6990 } | 6981 } |
6991 // Allocate the buffer. | 6982 // Allocate the buffer. |
6992 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len); | 6983 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(len); |
6993 // Layout the fields in the buffer. | 6984 // Layout the fields in the buffer. |
6994 intptr_t num_chars = 0; | 6985 intptr_t num_chars = 0; |
6995 for (intptr_t i = 0; i < Length(); i++) { | 6986 for (intptr_t i = 0; i < Length(); i++) { |
6996 GetHandlerInfo(i, &info); | 6987 GetHandlerInfo(i, &info); |
6997 handled_types = GetHandledTypes(i); | 6988 handled_types = GetHandledTypes(i); |
6998 intptr_t num_types = handled_types.Length(); | 6989 intptr_t num_types = handled_types.Length(); |
6999 num_chars += OS::SNPrint((buffer + num_chars), | 6990 num_chars += OS::SNPrint((buffer + num_chars), |
7000 (len - num_chars), | 6991 (len - num_chars), |
7001 kFormat, | 6992 kFormat, |
7002 info.try_index, | 6993 i, |
7003 info.handler_pc, | 6994 info.handler_pc, |
7004 num_types, | 6995 num_types, |
7005 info.outer_try_index); | 6996 info.outer_try_index); |
7006 for (int k = 0; k < num_types; k++) { | 6997 for (int k = 0; k < num_types; k++) { |
7007 type ^= handled_types.At(k); | 6998 type ^= handled_types.At(k); |
7008 num_chars += OS::SNPrint((buffer + num_chars), | 6999 num_chars += OS::SNPrint((buffer + num_chars), |
7009 (len - num_chars), | 7000 (len - num_chars), |
7010 kFormat2, k, type.ToCString()); | 7001 kFormat2, k, type.ToCString()); |
7011 } | 7002 } |
7012 } | 7003 } |
(...skipping 5523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12536 } | 12527 } |
12537 return result.raw(); | 12528 return result.raw(); |
12538 } | 12529 } |
12539 | 12530 |
12540 | 12531 |
12541 const char* WeakProperty::ToCString() const { | 12532 const char* WeakProperty::ToCString() const { |
12542 return "_WeakProperty"; | 12533 return "_WeakProperty"; |
12543 } | 12534 } |
12544 | 12535 |
12545 } // namespace dart | 12536 } // namespace dart |
OLD | NEW |