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

Unified Diff: runtime/vm/dart_api_impl.cc

Issue 238063011: Modify the Weak Reference Set creation API to make it easier to create (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/include/dart_api.h ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « runtime/include/dart_api.h ('k') | runtime/vm/dart_api_impl_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698