Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 "include/dart_api.h" | 5 #include "include/dart_api.h" |
| 6 | 6 |
| 7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
| 8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
| 9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
| 10 #include "vm/dart.h" | 10 #include "vm/dart.h" |
| (...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 480 DART_EXPORT Dart_Handle Dart_IsSame(Dart_Handle obj1, Dart_Handle obj2, | 480 DART_EXPORT Dart_Handle Dart_IsSame(Dart_Handle obj1, Dart_Handle obj2, |
| 481 bool* value) { | 481 bool* value) { |
| 482 DARTSCOPE(Isolate::Current()); | 482 DARTSCOPE(Isolate::Current()); |
| 483 const Object& expected = Object::Handle(Api::UnwrapHandle(obj1)); | 483 const Object& expected = Object::Handle(Api::UnwrapHandle(obj1)); |
| 484 const Object& actual = Object::Handle(Api::UnwrapHandle(obj2)); | 484 const Object& actual = Object::Handle(Api::UnwrapHandle(obj2)); |
| 485 *value = (expected.raw() == actual.raw()); | 485 *value = (expected.raw() == actual.raw()); |
| 486 return Api::Success(); | 486 return Api::Success(); |
| 487 } | 487 } |
| 488 | 488 |
| 489 | 489 |
| 490 DART_EXPORT Dart_Handle Dart_NewPersistentHandle(Dart_Handle object) { | 490 static PersistentHandle* AllocatePersistentHandle(Dart_Handle object) { |
| 491 Isolate* isolate = Isolate::Current(); | 491 Isolate* isolate = Isolate::Current(); |
| 492 CHECK_ISOLATE(isolate); | 492 CHECK_ISOLATE(isolate); |
| 493 DARTSCOPE_NOCHECKS(isolate); | 493 DARTSCOPE_NOCHECKS(isolate); |
| 494 ApiState* state = isolate->api_state(); | 494 ApiState* state = isolate->api_state(); |
| 495 ASSERT(state != NULL); | 495 ASSERT(state != NULL); |
| 496 const Object& old_ref = Object::Handle(Api::UnwrapHandle(object)); | 496 const Object& old_ref = Object::Handle(Api::UnwrapHandle(object)); |
| 497 PersistentHandle* new_ref = state->persistent_handles().AllocateHandle(); | 497 PersistentHandle* new_ref = state->persistent_handles().AllocateHandle(); |
| 498 new_ref->set_raw(old_ref); | 498 new_ref->set_raw(old_ref); |
| 499 return new_ref; | |
| 500 } | |
| 501 | |
| 502 | |
| 503 DART_EXPORT Dart_Handle Dart_NewPersistentHandle(Dart_Handle object) { | |
| 504 PersistentHandle* new_ref = AllocatePersistentHandle(object); | |
| 505 new_ref->set_kind(PersistentHandle::StrongReference); | |
| 499 return reinterpret_cast<Dart_Handle>(new_ref); | 506 return reinterpret_cast<Dart_Handle>(new_ref); |
| 500 } | 507 } |
| 501 | 508 |
| 509 | |
| 510 DART_EXPORT Dart_Handle Dart_NewWeakPersistentHandle( | |
| 511 Dart_Handle object, | |
| 512 Dart_PeerFinalizer callback) { | |
|
Ivan Posva
2011/12/19 22:41:36
We will need to add the peer pointer here.
cshapiro
2011/12/20 00:58:57
Sure. I was going to leave this for the next chan
| |
| 513 PersistentHandle* new_ref = AllocatePersistentHandle(object); | |
| 514 new_ref->set_kind(PersistentHandle::WeakReference); | |
| 515 new_ref->set_callback(reinterpret_cast<void*>(callback)); | |
| 516 return reinterpret_cast<Dart_Handle>(new_ref); | |
| 517 } | |
| 518 | |
| 502 | 519 |
| 503 DART_EXPORT void Dart_DeletePersistentHandle(Dart_Handle object) { | 520 DART_EXPORT void Dart_DeletePersistentHandle(Dart_Handle object) { |
| 504 Isolate* isolate = Isolate::Current(); | 521 Isolate* isolate = Isolate::Current(); |
| 505 CHECK_ISOLATE(isolate); | 522 CHECK_ISOLATE(isolate); |
| 506 ApiState* state = isolate->api_state(); | 523 ApiState* state = isolate->api_state(); |
| 507 ASSERT(state != NULL); | 524 ASSERT(state != NULL); |
| 508 PersistentHandle* ref = Api::UnwrapAsPersistentHandle(*state, object); | 525 PersistentHandle* ref = Api::UnwrapAsPersistentHandle(*state, object); |
| 509 ASSERT(!ref->IsProtected()); | 526 ASSERT(!ref->IsProtected()); |
| 510 if (!ref->IsProtected()) { | 527 if (!ref->IsProtected()) { |
| 511 state->persistent_handles().FreeHandle(ref); | 528 state->persistent_handles().FreeHandle(ref); |
| 512 } | 529 } |
| 513 } | 530 } |
| 514 | 531 |
| 515 | 532 |
| 516 DART_EXPORT Dart_Handle Dart_MakeWeakPersistentHandle(Dart_Handle object) { | 533 DART_EXPORT bool Dart_IsWeakPersistentHandle(Dart_Handle object) { |
| 517 UNIMPLEMENTED(); | 534 Isolate* isolate = Isolate::Current(); |
| 518 return NULL; | 535 CHECK_ISOLATE(isolate); |
| 536 ApiState* state = isolate->api_state(); | |
| 537 ASSERT(state != NULL); | |
| 538 if (state->IsValidPersistentHandle(object)) { | |
| 539 PersistentHandle* ref = Api::UnwrapAsPersistentHandle(*state, object); | |
| 540 return ref->kind() == PersistentHandle::WeakReference; | |
| 541 } | |
| 542 return false; | |
| 519 } | 543 } |
| 520 | 544 |
| 521 | 545 |
| 522 DART_EXPORT Dart_Handle Dart_MakePersistentHandle(Dart_Handle object) { | |
| 523 UNIMPLEMENTED(); | |
| 524 return NULL; | |
| 525 } | |
| 526 | |
| 527 | |
| 528 // --- Initialization and Globals --- | 546 // --- Initialization and Globals --- |
| 529 | 547 |
| 530 | 548 |
| 531 DART_EXPORT bool Dart_Initialize(Dart_IsolateCreateCallback create, | 549 DART_EXPORT bool Dart_Initialize(Dart_IsolateCreateCallback create, |
| 532 Dart_IsolateInterruptCallback interrupt) { | 550 Dart_IsolateInterruptCallback interrupt) { |
| 533 return Dart::InitOnce(create, interrupt); | 551 return Dart::InitOnce(create, interrupt); |
| 534 } | 552 } |
| 535 | 553 |
| 536 DART_EXPORT bool Dart_SetVMFlags(int argc, const char** argv) { | 554 DART_EXPORT bool Dart_SetVMFlags(int argc, const char** argv) { |
| 537 return Flags::ProcessCommandLineFlags(argc, argv); | 555 return Flags::ProcessCommandLineFlags(argc, argv); |
| (...skipping 1974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2512 } | 2530 } |
| 2513 delete debug_region; | 2531 delete debug_region; |
| 2514 } else { | 2532 } else { |
| 2515 *buffer = NULL; | 2533 *buffer = NULL; |
| 2516 *buffer_size = 0; | 2534 *buffer_size = 0; |
| 2517 } | 2535 } |
| 2518 } | 2536 } |
| 2519 | 2537 |
| 2520 | 2538 |
| 2521 } // namespace dart | 2539 } // namespace dart |
| OLD | NEW |