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( |