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 #ifndef VM_OBJECT_H_ | 5 #ifndef VM_OBJECT_H_ |
6 #define VM_OBJECT_H_ | 6 #define VM_OBJECT_H_ |
7 | 7 |
8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
10 #include "platform/utils.h" | 10 #include "platform/utils.h" |
| 11 #include "vm/bitmap.h" |
11 #include "vm/dart.h" | 12 #include "vm/dart.h" |
12 #include "vm/globals.h" | 13 #include "vm/globals.h" |
13 #include "vm/handles.h" | 14 #include "vm/handles.h" |
14 #include "vm/heap.h" | 15 #include "vm/heap.h" |
15 #include "vm/isolate.h" | 16 #include "vm/isolate.h" |
16 #include "vm/os.h" | 17 #include "vm/os.h" |
17 #include "vm/raw_object.h" | 18 #include "vm/raw_object.h" |
18 #include "vm/scanner.h" | 19 #include "vm/scanner.h" |
19 | 20 |
20 namespace dart { | 21 namespace dart { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 kFunctionClass, | 146 kFunctionClass, |
146 kFieldClass, | 147 kFieldClass, |
147 kLiteralTokenClass, | 148 kLiteralTokenClass, |
148 kTokenStreamClass, | 149 kTokenStreamClass, |
149 kScriptClass, | 150 kScriptClass, |
150 kLibraryClass, | 151 kLibraryClass, |
151 kLibraryPrefixClass, | 152 kLibraryPrefixClass, |
152 kCodeClass, | 153 kCodeClass, |
153 kInstructionsClass, | 154 kInstructionsClass, |
154 kPcDescriptorsClass, | 155 kPcDescriptorsClass, |
| 156 kStackmapClass, |
155 kLocalVarDescriptorsClass, | 157 kLocalVarDescriptorsClass, |
156 kExceptionHandlersClass, | 158 kExceptionHandlersClass, |
157 kContextClass, | 159 kContextClass, |
158 kContextScopeClass, | 160 kContextScopeClass, |
159 kICDataClass, | 161 kICDataClass, |
160 kApiErrorClass, | 162 kApiErrorClass, |
161 kLanguageErrorClass, | 163 kLanguageErrorClass, |
162 kUnhandledExceptionClass, | 164 kUnhandledExceptionClass, |
163 kUnwindErrorClass, | 165 kUnwindErrorClass, |
164 kMaxId, | 166 kMaxId, |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 static RawClass* function_class() { return function_class_; } | 283 static RawClass* function_class() { return function_class_; } |
282 static RawClass* field_class() { return field_class_; } | 284 static RawClass* field_class() { return field_class_; } |
283 static RawClass* literal_token_class() { return literal_token_class_; } | 285 static RawClass* literal_token_class() { return literal_token_class_; } |
284 static RawClass* token_stream_class() { return token_stream_class_; } | 286 static RawClass* token_stream_class() { return token_stream_class_; } |
285 static RawClass* script_class() { return script_class_; } | 287 static RawClass* script_class() { return script_class_; } |
286 static RawClass* library_class() { return library_class_; } | 288 static RawClass* library_class() { return library_class_; } |
287 static RawClass* library_prefix_class() { return library_prefix_class_; } | 289 static RawClass* library_prefix_class() { return library_prefix_class_; } |
288 static RawClass* code_class() { return code_class_; } | 290 static RawClass* code_class() { return code_class_; } |
289 static RawClass* instructions_class() { return instructions_class_; } | 291 static RawClass* instructions_class() { return instructions_class_; } |
290 static RawClass* pc_descriptors_class() { return pc_descriptors_class_; } | 292 static RawClass* pc_descriptors_class() { return pc_descriptors_class_; } |
| 293 static RawClass* stackmap_class() { return stackmap_class_; } |
291 static RawClass* var_descriptors_class() { return var_descriptors_class_; } | 294 static RawClass* var_descriptors_class() { return var_descriptors_class_; } |
292 static RawClass* exception_handlers_class() { | 295 static RawClass* exception_handlers_class() { |
293 return exception_handlers_class_; | 296 return exception_handlers_class_; |
294 } | 297 } |
295 static RawClass* context_class() { return context_class_; } | 298 static RawClass* context_class() { return context_class_; } |
296 static RawClass* context_scope_class() { return context_scope_class_; } | 299 static RawClass* context_scope_class() { return context_scope_class_; } |
297 static RawClass* api_error_class() { return api_error_class_; } | 300 static RawClass* api_error_class() { return api_error_class_; } |
298 static RawClass* language_error_class() { return language_error_class_; } | 301 static RawClass* language_error_class() { return language_error_class_; } |
299 static RawClass* unhandled_exception_class() { | 302 static RawClass* unhandled_exception_class() { |
300 return unhandled_exception_class_; | 303 return unhandled_exception_class_; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 static RawClass* function_class_; // Class of the Function vm object. | 391 static RawClass* function_class_; // Class of the Function vm object. |
389 static RawClass* field_class_; // Class of the Field vm object. | 392 static RawClass* field_class_; // Class of the Field vm object. |
390 static RawClass* literal_token_class_; // Class of LiteralToken vm object. | 393 static RawClass* literal_token_class_; // Class of LiteralToken vm object. |
391 static RawClass* token_stream_class_; // Class of the TokenStream vm object. | 394 static RawClass* token_stream_class_; // Class of the TokenStream vm object. |
392 static RawClass* script_class_; // Class of the Script vm object. | 395 static RawClass* script_class_; // Class of the Script vm object. |
393 static RawClass* library_class_; // Class of the Library vm object. | 396 static RawClass* library_class_; // Class of the Library vm object. |
394 static RawClass* library_prefix_class_; // Class of Library prefix vm object. | 397 static RawClass* library_prefix_class_; // Class of Library prefix vm object. |
395 static RawClass* code_class_; // Class of the Code vm object. | 398 static RawClass* code_class_; // Class of the Code vm object. |
396 static RawClass* instructions_class_; // Class of the Instructions vm object. | 399 static RawClass* instructions_class_; // Class of the Instructions vm object. |
397 static RawClass* pc_descriptors_class_; // Class of PcDescriptors vm object. | 400 static RawClass* pc_descriptors_class_; // Class of PcDescriptors vm object. |
| 401 static RawClass* stackmap_class_; // Class of Stackmap vm object. |
398 static RawClass* var_descriptors_class_; // Class of LocalVarDescriptors. | 402 static RawClass* var_descriptors_class_; // Class of LocalVarDescriptors. |
399 static RawClass* exception_handlers_class_; // Class of ExceptionHandlers. | 403 static RawClass* exception_handlers_class_; // Class of ExceptionHandlers. |
400 static RawClass* context_class_; // Class of the Context vm object. | 404 static RawClass* context_class_; // Class of the Context vm object. |
401 static RawClass* context_scope_class_; // Class of ContextScope vm object. | 405 static RawClass* context_scope_class_; // Class of ContextScope vm object. |
402 static RawClass* icdata_class_; // Class of ICData. | 406 static RawClass* icdata_class_; // Class of ICData. |
403 static RawClass* api_error_class_; // Class of ApiError. | 407 static RawClass* api_error_class_; // Class of ApiError. |
404 static RawClass* language_error_class_; // Class of LanguageError. | 408 static RawClass* language_error_class_; // Class of LanguageError. |
405 static RawClass* unhandled_exception_class_; // Class of UnhandledException. | 409 static RawClass* unhandled_exception_class_; // Class of UnhandledException. |
406 static RawClass* unwind_error_class_; // Class of UnwindError. | 410 static RawClass* unwind_error_class_; // Class of UnwindError. |
407 | 411 |
(...skipping 1569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1977 } | 1981 } |
1978 RawSmi** SmiAddr(intptr_t index, intptr_t entry_offset) const { | 1982 RawSmi** SmiAddr(intptr_t index, intptr_t entry_offset) const { |
1979 return reinterpret_cast<RawSmi**>(EntryAddr(index, entry_offset)); | 1983 return reinterpret_cast<RawSmi**>(EntryAddr(index, entry_offset)); |
1980 } | 1984 } |
1981 | 1985 |
1982 HEAP_OBJECT_IMPLEMENTATION(PcDescriptors, Object); | 1986 HEAP_OBJECT_IMPLEMENTATION(PcDescriptors, Object); |
1983 friend class Class; | 1987 friend class Class; |
1984 }; | 1988 }; |
1985 | 1989 |
1986 | 1990 |
| 1991 class Stackmap : public Object { |
| 1992 public: |
| 1993 static const intptr_t kNoMaximum = -1; |
| 1994 static const intptr_t kNoMinimum = -1; |
| 1995 |
| 1996 bool IsObject(intptr_t offset) const { |
| 1997 return InRange(offset) && GetBit(offset); |
| 1998 } |
| 1999 uword pc() const { return raw_ptr()->pc_; } |
| 2000 |
| 2001 static intptr_t InstanceSize() { |
| 2002 ASSERT(sizeof(RawStackmap) == OFFSET_OF(RawStackmap, data_)); |
| 2003 return 0; |
| 2004 } |
| 2005 static intptr_t InstanceSize(intptr_t size) { |
| 2006 return RoundedAllocationSize(sizeof(RawStackmap) + (size * kWordSize)); |
| 2007 } |
| 2008 static RawStackmap* New(uword pc, const Code& code, BitmapBuilder* bmap); |
| 2009 |
| 2010 private: |
| 2011 inline intptr_t SizeInBits() const; |
| 2012 |
| 2013 bool InRange(intptr_t offset) const { return offset < SizeInBits(); } |
| 2014 |
| 2015 bool GetBit(intptr_t bit_offset) const; |
| 2016 void SetBit(intptr_t bit_offset, bool value) const; |
| 2017 |
| 2018 // Return the offset of the highest stack slot that has an object. |
| 2019 intptr_t Maximum() const; |
| 2020 |
| 2021 // Return the offset of the lowest stack slot that has an object. |
| 2022 intptr_t Minimum() const; |
| 2023 |
| 2024 void set_bitmap_size_in_bytes(intptr_t value) const; |
| 2025 void set_pc(uword value) const; |
| 2026 void set_code(const Code& code) const; |
| 2027 |
| 2028 HEAP_OBJECT_IMPLEMENTATION(Stackmap, Object); |
| 2029 friend class Class; |
| 2030 friend class BitmapBuilder; |
| 2031 }; |
| 2032 |
| 2033 |
1987 class ExceptionHandlers : public Object { | 2034 class ExceptionHandlers : public Object { |
1988 public: | 2035 public: |
1989 intptr_t Length() const; | 2036 intptr_t Length() const; |
1990 | 2037 |
1991 intptr_t TryIndex(intptr_t index) const; | 2038 intptr_t TryIndex(intptr_t index) const; |
1992 intptr_t HandlerPC(intptr_t index) const; | 2039 intptr_t HandlerPC(intptr_t index) const; |
1993 | 2040 |
1994 void SetHandlerEntry(intptr_t index, | 2041 void SetHandlerEntry(intptr_t index, |
1995 intptr_t try_index, | 2042 intptr_t try_index, |
1996 intptr_t handler_pc) const { | 2043 intptr_t handler_pc) const { |
(...skipping 1830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3827 } | 3874 } |
3828 ASSERT(obj.IsString()); // Must be an identifier. | 3875 ASSERT(obj.IsString()); // Must be an identifier. |
3829 return Token::kIDENT; | 3876 return Token::kIDENT; |
3830 } | 3877 } |
3831 | 3878 |
3832 | 3879 |
3833 void Context::SetAt(intptr_t index, const Instance& value) const { | 3880 void Context::SetAt(intptr_t index, const Instance& value) const { |
3834 StorePointer(InstanceAddr(index), value.raw()); | 3881 StorePointer(InstanceAddr(index), value.raw()); |
3835 } | 3882 } |
3836 | 3883 |
| 3884 |
| 3885 intptr_t Stackmap::SizeInBits() const { |
| 3886 return (Smi::Value(raw_ptr()->bitmap_size_in_bytes_) * kBitsPerByte); |
| 3887 } |
| 3888 |
3837 } // namespace dart | 3889 } // namespace dart |
3838 | 3890 |
3839 #endif // VM_OBJECT_H_ | 3891 #endif // VM_OBJECT_H_ |
OLD | NEW |