| Index: runtime/vm/dart_api_impl.cc
|
| ===================================================================
|
| --- runtime/vm/dart_api_impl.cc (revision 35211)
|
| +++ runtime/vm/dart_api_impl.cc (working copy)
|
| @@ -93,6 +93,16 @@
|
| }
|
|
|
|
|
| +WeakReferenceSetBuilder* ApiState::NewWeakReferenceSetBuilder() {
|
| + return new WeakReferenceSetBuilder(this);
|
| +}
|
| +
|
| +
|
| +void ApiState::DelayWeakReferenceSet(WeakReferenceSet* reference_set) {
|
| + WeakReferenceSet::Push(reference_set, &delayed_weak_reference_sets_);
|
| +}
|
| +
|
| +
|
| Dart_Handle Api::InitNewHandle(Isolate* isolate, RawObject* raw) {
|
| LocalHandles* local_handles = Api::TopScope(isolate)->local_handles();
|
| ASSERT(local_handles != NULL);
|
| @@ -742,39 +752,66 @@
|
| }
|
|
|
|
|
| -DART_EXPORT Dart_Handle Dart_NewWeakReferenceSet(
|
| - Dart_WeakPersistentHandle* keys,
|
| - intptr_t num_keys,
|
| - Dart_WeakPersistentHandle* values,
|
| - intptr_t num_values) {
|
| +DART_EXPORT Dart_WeakReferenceSetBuilder Dart_NewWeakReferenceSetBuilder() {
|
| Isolate* isolate = Isolate::Current();
|
| CHECK_ISOLATE(isolate);
|
| ApiState* state = isolate->api_state();
|
| ASSERT(state != NULL);
|
| - if (keys == NULL) {
|
| - RETURN_NULL_ERROR(keys);
|
| + return reinterpret_cast<Dart_WeakReferenceSetBuilder>(
|
| + state->NewWeakReferenceSetBuilder());
|
| +}
|
| +
|
| +
|
| +DART_EXPORT Dart_WeakReferenceSet Dart_NewWeakReferenceSet(
|
| + Dart_WeakReferenceSetBuilder set_builder,
|
| + Dart_WeakPersistentHandle key,
|
| + Dart_WeakPersistentHandle value) {
|
| + ASSERT(set_builder != NULL && key != NULL);
|
| + WeakReferenceSetBuilder* builder =
|
| + reinterpret_cast<WeakReferenceSetBuilder*>(set_builder);
|
| + ApiState* state = builder->api_state();
|
| + ASSERT(state == Isolate::Current()->api_state());
|
| + WeakReferenceSet* reference_set = builder->NewWeakReferenceSet();
|
| + reference_set->AppendKey(key);
|
| + if (value != NULL) {
|
| + reference_set->AppendValue(value);
|
| }
|
| - if (num_keys <= 0) {
|
| - return Api::NewError(
|
| - "%s expects argument 'num_keys' to be greater than 0.",
|
| - CURRENT_FUNC);
|
| - }
|
| - if (values == NULL) {
|
| - RETURN_NULL_ERROR(values);
|
| - }
|
| - if (num_values <= 0) {
|
| - return Api::NewError(
|
| - "%s expects argument 'num_values' to be greater than 0.",
|
| - CURRENT_FUNC);
|
| - }
|
| + state->DelayWeakReferenceSet(reference_set);
|
| + return reinterpret_cast<Dart_WeakReferenceSet>(reference_set);
|
| +}
|
|
|
| - WeakReferenceSet* reference_set = new WeakReferenceSet(keys, num_keys,
|
| - values, num_values);
|
| - state->DelayWeakReferenceSet(reference_set);
|
| +
|
| +DART_EXPORT Dart_Handle Dart_AppendToWeakReferenceSet(
|
| + Dart_WeakReferenceSet reference_set,
|
| + Dart_WeakPersistentHandle key,
|
| + Dart_WeakPersistentHandle value) {
|
| + ASSERT(reference_set != NULL);
|
| + WeakReferenceSet* set = reinterpret_cast<WeakReferenceSet*>(reference_set);
|
| + set->Append(key, value);
|
| return Api::Success();
|
| }
|
|
|
|
|
| +DART_EXPORT Dart_Handle Dart_AppendKeyToWeakReferenceSet(
|
| + Dart_WeakReferenceSet reference_set,
|
| + Dart_WeakPersistentHandle key) {
|
| + ASSERT(reference_set != NULL);
|
| + WeakReferenceSet* set = reinterpret_cast<WeakReferenceSet*>(reference_set);
|
| + set->AppendKey(key);
|
| + return Api::Success();
|
| +}
|
| +
|
| +
|
| +DART_EXPORT Dart_Handle Dart_AppendValueToWeakReferenceSet(
|
| + Dart_WeakReferenceSet reference_set,
|
| + Dart_WeakPersistentHandle value) {
|
| + ASSERT(reference_set != NULL);
|
| + WeakReferenceSet* set = reinterpret_cast<WeakReferenceSet*>(reference_set);
|
| + set->AppendValue(value);
|
| + return Api::Success();
|
| +}
|
| +
|
| +
|
| // --- Garbage Collection Callbacks --
|
|
|
| DART_EXPORT Dart_Handle Dart_SetGcCallbacks(
|
|
|