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

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

Issue 337183002: Refactor creation of FinalizablePersistentHandle into proper factory. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/dart_api_impl.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_DART_API_STATE_H_ 5 #ifndef VM_DART_API_STATE_H_
6 #define VM_DART_API_STATE_H_ 6 #define VM_DART_API_STATE_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 9
10 #include "platform/thread.h" 10 #include "platform/thread.h"
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 RawObject* raw_; 183 RawObject* raw_;
184 DISALLOW_ALLOCATION(); // Allocated through AllocateHandle methods. 184 DISALLOW_ALLOCATION(); // Allocated through AllocateHandle methods.
185 DISALLOW_COPY_AND_ASSIGN(PersistentHandle); 185 DISALLOW_COPY_AND_ASSIGN(PersistentHandle);
186 }; 186 };
187 187
188 188
189 // Implementation of persistent handles which are handed out through the 189 // Implementation of persistent handles which are handed out through the
190 // dart API. 190 // dart API.
191 class FinalizablePersistentHandle { 191 class FinalizablePersistentHandle {
192 public: 192 public:
193 static FinalizablePersistentHandle* New(
194 Isolate* isolate,
195 bool is_prologue,
196 const Object& object,
197 void* peer,
198 Dart_WeakPersistentHandleFinalizer callback,
199 intptr_t external_size);
200
193 // Accessors. 201 // Accessors.
194 RawObject* raw() const { return raw_; } 202 RawObject* raw() const { return raw_; }
195 void set_raw(RawObject* raw) { raw_ = raw; }
196 void set_raw(const LocalHandle& ref) { raw_ = ref.raw(); }
197 void set_raw(const Object& object) { raw_ = object.raw(); }
198 RawObject** raw_addr() { return &raw_; } 203 RawObject** raw_addr() { return &raw_; }
199 static intptr_t raw_offset() { 204 static intptr_t raw_offset() {
200 return OFFSET_OF(FinalizablePersistentHandle, raw_); 205 return OFFSET_OF(FinalizablePersistentHandle, raw_);
201 } 206 }
202 void* peer() const { return peer_; } 207 void* peer() const { return peer_; }
203 void set_peer(void* peer) { peer_ = peer; }
204 Dart_WeakPersistentHandleFinalizer callback() const { return callback_; } 208 Dart_WeakPersistentHandleFinalizer callback() const { return callback_; }
205 void set_callback(Dart_WeakPersistentHandleFinalizer callback) {
206 callback_ = callback;
207 }
208 Dart_WeakPersistentHandle apiHandle() { 209 Dart_WeakPersistentHandle apiHandle() {
209 return reinterpret_cast<Dart_WeakPersistentHandle>(this); 210 return reinterpret_cast<Dart_WeakPersistentHandle>(this);
210 } 211 }
211 212
212 void SetExternalSize(intptr_t size, Isolate* isolate) { 213 void SetExternalSize(intptr_t size, Isolate* isolate) {
213 ASSERT(size >= 0); 214 ASSERT(size >= 0);
214 set_external_size(Utils::RoundUp(size, kObjectAlignment)); 215 set_external_size(Utils::RoundUp(size, kObjectAlignment));
215 if (SpaceForExternal() == Heap::kNew) { 216 if (SpaceForExternal() == Heap::kNew) {
216 SetExternalNewSpaceBit(); 217 SetExternalNewSpaceBit();
217 } 218 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 SetNext(free_list); 294 SetNext(free_list);
294 } 295 }
295 296
296 void Clear() { 297 void Clear() {
297 raw_ = Object::null(); 298 raw_ = Object::null();
298 peer_ = NULL; 299 peer_ = NULL;
299 external_data_ = 0; 300 external_data_ = 0;
300 callback_ = NULL; 301 callback_ = NULL;
301 } 302 }
302 303
304 void set_raw(RawObject* raw) { raw_ = raw; }
305 void set_raw(const LocalHandle& ref) { raw_ = ref.raw(); }
306 void set_raw(const Object& object) { raw_ = object.raw(); }
307
308 void set_peer(void* peer) { peer_ = peer; }
309
310 void set_callback(Dart_WeakPersistentHandleFinalizer callback) {
311 callback_ = callback;
312 }
313
303 intptr_t external_size() const { 314 intptr_t external_size() const {
304 return ExternalSizeBits::decode(external_data_); 315 return ExternalSizeBits::decode(external_data_);
305 } 316 }
306 317
307 void set_external_size(intptr_t size) { 318 void set_external_size(intptr_t size) {
308 ASSERT(ExternalSizeBits::is_valid(size)); 319 ASSERT(ExternalSizeBits::is_valid(size));
309 external_data_ = ExternalSizeBits::update(size, external_data_); 320 external_data_ = ExternalSizeBits::update(size, external_data_);
310 } 321 }
311 322
312 bool IsSetNewSpaceBit() const { 323 bool IsSetNewSpaceBit() const {
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 } 946 }
936 947
937 ApiState* api_state_; 948 ApiState* api_state_;
938 Zone* zone_; 949 Zone* zone_;
939 950
940 friend class ApiState; 951 friend class ApiState;
941 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakReferenceSetBuilder); 952 DISALLOW_IMPLICIT_CONSTRUCTORS(WeakReferenceSetBuilder);
942 }; 953 };
943 954
944 955
956 inline FinalizablePersistentHandle* FinalizablePersistentHandle::New(
957 Isolate* isolate,
958 bool is_prologue,
959 const Object& object,
960 void* peer,
961 Dart_WeakPersistentHandleFinalizer callback,
962 intptr_t external_size) {
963 ApiState* state = isolate->api_state();
964 ASSERT(state != NULL);
965 FinalizablePersistentHandle* ref = is_prologue ?
966 state->prologue_weak_persistent_handles().AllocateHandle() :
967 state->weak_persistent_handles().AllocateHandle();
968 ref->SetPrologueWeakPersistent(is_prologue);
969 ref->set_raw(object);
970 ref->set_peer(peer);
971 ref->set_callback(callback);
972 ref->SetExternalSize(external_size, isolate);
973 return ref;
974 }
975
945 } // namespace dart 976 } // namespace dart
946 977
947 #endif // VM_DART_API_STATE_H_ 978 #endif // VM_DART_API_STATE_H_
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698