Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(715)

Side by Side Diff: runtime/vm/object.h

Issue 1221503004: Reclaim the CreatedFromSnapshot bit and use it to indicate VM Heap object (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: address-code-review-comments Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/dart_api_message.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 242
243 RawObject* raw() const { return raw_; } 243 RawObject* raw() const { return raw_; }
244 void operator=(RawObject* value) { 244 void operator=(RawObject* value) {
245 initializeHandle(this, value); 245 initializeHandle(this, value);
246 } 246 }
247 247
248 uword CompareAndSwapTags(uword old_tags, uword new_tags) const { 248 uword CompareAndSwapTags(uword old_tags, uword new_tags) const {
249 return AtomicOperations::CompareAndSwapWord( 249 return AtomicOperations::CompareAndSwapWord(
250 &raw()->ptr()->tags_, old_tags, new_tags); 250 &raw()->ptr()->tags_, old_tags, new_tags);
251 } 251 }
252 void set_tags(intptr_t value) const {
253 ASSERT(!IsNull());
254 // TODO(asiva): Remove the capability of setting tags in general. The mask
255 // here only allows for canonical and from_snapshot flags to be set.
256 value = value & 0x0000000c;
257 uword tags = raw()->ptr()->tags_;
258 uword old_tags;
259 do {
260 old_tags = tags;
261 uword new_tags = (old_tags & ~0x0000000c) | value;
262 tags = CompareAndSwapTags(old_tags, new_tags);
263 } while (tags != old_tags);
264 }
265 void SetCreatedFromSnapshot() const {
266 ASSERT(!IsNull());
267 raw()->SetCreatedFromSnapshot();
268 }
269 bool IsCanonical() const { 252 bool IsCanonical() const {
270 ASSERT(!IsNull()); 253 ASSERT(!IsNull());
271 return raw()->IsCanonical(); 254 return raw()->IsCanonical();
272 } 255 }
273 void SetCanonical() const { 256 void SetCanonical() const {
274 ASSERT(!IsNull()); 257 ASSERT(!IsNull());
275 raw()->SetCanonical(); 258 raw()->SetCanonical();
276 } 259 }
277 void ClearCanonical() const { 260 void ClearCanonical() const {
278 ASSERT(!IsNull()); 261 ASSERT(!IsNull());
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 bool ref) const; 704 bool ref) const;
722 705
723 virtual void PrintJSONImpl(JSONStream* stream, bool ref) const; 706 virtual void PrintJSONImpl(JSONStream* stream, bool ref) const;
724 707
725 private: 708 private:
726 static intptr_t NextFieldOffset() { 709 static intptr_t NextFieldOffset() {
727 // Indicates this class cannot be extended by dart code. 710 // Indicates this class cannot be extended by dart code.
728 return -kWordSize; 711 return -kWordSize;
729 } 712 }
730 713
731 static void InitializeObject(uword address, intptr_t id, intptr_t size); 714 static void InitializeObject(uword address,
715 intptr_t id,
716 intptr_t size,
717 bool is_vm_object);
732 718
733 static void RegisterClass(const Class& cls, 719 static void RegisterClass(const Class& cls,
734 const String& name, 720 const String& name,
735 const Library& lib); 721 const Library& lib);
736 static void RegisterPrivateClass(const Class& cls, 722 static void RegisterPrivateClass(const Class& cls,
737 const String& name, 723 const String& name,
738 const Library& lib); 724 const Library& lib);
739 725
740 /* Initialize the handle based on the raw_ptr in the presence of null. */ 726 /* Initialize the handle based on the raw_ptr in the presence of null. */
741 static void initializeHandle(Object* obj, RawObject* raw_ptr) { 727 static void initializeHandle(Object* obj, RawObject* raw_ptr) {
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 } 924 }
939 intptr_t id() const { return raw_ptr()->id_; } 925 intptr_t id() const { return raw_ptr()->id_; }
940 void set_id(intptr_t value) const { 926 void set_id(intptr_t value) const {
941 ASSERT(is_valid_id(value)); 927 ASSERT(is_valid_id(value));
942 StoreNonPointer(&raw_ptr()->id_, value); 928 StoreNonPointer(&raw_ptr()->id_, value);
943 } 929 }
944 930
945 RawString* Name() const; 931 RawString* Name() const;
946 RawString* PrettyName() const; 932 RawString* PrettyName() const;
947 RawString* UserVisibleName() const; 933 RawString* UserVisibleName() const;
934 bool IsInFullSnapshot() const;
948 935
949 virtual RawString* DictionaryName() const { return Name(); } 936 virtual RawString* DictionaryName() const { return Name(); }
950 937
951 RawScript* script() const { return raw_ptr()->script_; } 938 RawScript* script() const { return raw_ptr()->script_; }
952 void set_script(const Script& value) const; 939 void set_script(const Script& value) const;
953 940
954 intptr_t token_pos() const { return raw_ptr()->token_pos_; } 941 intptr_t token_pos() const { return raw_ptr()->token_pos_; }
955 void set_token_pos(intptr_t value) const; 942 void set_token_pos(intptr_t value) const;
956 943
957 intptr_t ComputeEndTokenPos() const; 944 intptr_t ComputeEndTokenPos() const;
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 // Check if this class represents the 'Function' class. 1095 // Check if this class represents the 'Function' class.
1109 bool IsFunctionClass() const; 1096 bool IsFunctionClass() const;
1110 1097
1111 // Check if this class represents a signature class. 1098 // Check if this class represents a signature class.
1112 bool IsSignatureClass() const { 1099 bool IsSignatureClass() const {
1113 return signature_function() != Object::null(); 1100 return signature_function() != Object::null();
1114 } 1101 }
1115 static bool IsSignatureClass(RawClass* cls) { 1102 static bool IsSignatureClass(RawClass* cls) {
1116 return cls->ptr()->signature_function_ != Object::null(); 1103 return cls->ptr()->signature_function_ != Object::null();
1117 } 1104 }
1105 static bool IsInFullSnapshot(RawClass* cls) {
1106 NoSafepointScope no_safepoint;
1107 return cls->ptr()->library_->ptr()->is_in_fullsnapshot_;
1108 }
1118 1109
1119 // Check if this class represents a canonical signature class, i.e. not an 1110 // Check if this class represents a canonical signature class, i.e. not an
1120 // alias as defined in a typedef. 1111 // alias as defined in a typedef.
1121 bool IsCanonicalSignatureClass() const; 1112 bool IsCanonicalSignatureClass() const;
1122 1113
1123 // Check the subtype relationship. 1114 // Check the subtype relationship.
1124 bool IsSubtypeOf(const TypeArguments& type_arguments, 1115 bool IsSubtypeOf(const TypeArguments& type_arguments,
1125 const Class& other, 1116 const Class& other,
1126 const TypeArguments& other_type_arguments, 1117 const TypeArguments& other_type_arguments,
1127 Error* bound_error) const { 1118 Error* bound_error) const {
(...skipping 2257 matching lines...) Expand 10 before | Expand all | Expand 10 after
3385 } 3376 }
3386 Dart_NativeEntrySymbol native_entry_symbol_resolver() const { 3377 Dart_NativeEntrySymbol native_entry_symbol_resolver() const {
3387 return raw_ptr()->native_entry_symbol_resolver_; 3378 return raw_ptr()->native_entry_symbol_resolver_;
3388 } 3379 }
3389 void set_native_entry_symbol_resolver( 3380 void set_native_entry_symbol_resolver(
3390 Dart_NativeEntrySymbol native_symbol_resolver) const { 3381 Dart_NativeEntrySymbol native_symbol_resolver) const {
3391 StoreNonPointer(&raw_ptr()->native_entry_symbol_resolver_, 3382 StoreNonPointer(&raw_ptr()->native_entry_symbol_resolver_,
3392 native_symbol_resolver); 3383 native_symbol_resolver);
3393 } 3384 }
3394 3385
3386 bool is_in_fullsnapshot() const { return raw_ptr()->is_in_fullsnapshot_; }
3387 void set_is_in_fullsnapshot(bool value) const {
3388 StoreNonPointer(&raw_ptr()->is_in_fullsnapshot_, value);
3389 }
3390
3395 RawError* Patch(const Script& script) const; 3391 RawError* Patch(const Script& script) const;
3396 3392
3397 RawString* PrivateName(const String& name) const; 3393 RawString* PrivateName(const String& name) const;
3398 3394
3399 intptr_t index() const { return raw_ptr()->index_; } 3395 intptr_t index() const { return raw_ptr()->index_; }
3400 void set_index(intptr_t value) const { 3396 void set_index(intptr_t value) const {
3401 StoreNonPointer(&raw_ptr()->index_, value); 3397 StoreNonPointer(&raw_ptr()->index_, value);
3402 } 3398 }
3403 3399
3404 void Register() const; 3400 void Register() const;
(...skipping 4634 matching lines...) Expand 10 before | Expand all | Expand 10 after
8039 8035
8040 8036
8041 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, 8037 RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
8042 intptr_t index) { 8038 intptr_t index) {
8043 return array.At((index * kEntryLength) + kTargetFunctionIndex); 8039 return array.At((index * kEntryLength) + kTargetFunctionIndex);
8044 } 8040 }
8045 8041
8046 } // namespace dart 8042 } // namespace dart
8047 8043
8048 #endif // VM_OBJECT_H_ 8044 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_message.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698