diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2011-10-27 13:40:00 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-13 09:56:57 +0200 |
commit | 6c28d75933a9a56a311573593711a7e73eeab8c3 (patch) | |
tree | 7ca910683e52518d150fa5f9621048c354456f81 /src/3rdparty/v8/src/api.cc | |
parent | ad36f9389077067fc8c990ba3655d7ac4fb6c286 (diff) |
[V8] Add custom object compare callback
A global custom object comparison callback can be set with:
V8::SetUserObjectComparisonCallbackFunction()
When two JSObjects are compared (== or !=), if either one has
the MarkAsUseUserObjectComparison() bit set, the custom comparison
callback is invoked to do the actual comparison.
This is useful when you have "value" objects that you want to
compare as equal, even though they are actually different JS object
instances.
Change-Id: Id1794ffc17131566c7ee30ab5fcf11445dab2ab2
Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
Diffstat (limited to 'src/3rdparty/v8/src/api.cc')
-rw-r--r-- | src/3rdparty/v8/src/api.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/3rdparty/v8/src/api.cc b/src/3rdparty/v8/src/api.cc index a33dd3c..d681328 100644 --- a/src/3rdparty/v8/src/api.cc +++ b/src/3rdparty/v8/src/api.cc @@ -1493,6 +1493,17 @@ void ObjectTemplate::SetHasExternalResource(bool value) } +void ObjectTemplate::MarkAsUseUserObjectComparison() +{ + i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); + if (IsDeadCheck(isolate, "v8::ObjectTemplate::MarkAsUseUserObjectComparison()")) { + return; + } + ENTER_V8(isolate); + EnsureConstructor(this); + Utils::OpenHandle(this)->set_use_user_object_comparison(i::Smi::FromInt(1)); +} + // --- S c r i p t D a t a --- @@ -5374,6 +5385,17 @@ void V8::SetFailedAccessCheckCallbackFunction( isolate->SetFailedAccessCheckCallback(callback); } + +void V8::SetUserObjectComparisonCallbackFunction( + UserObjectComparisonCallback callback) { + i::Isolate* isolate = i::Isolate::Current(); + if (IsDeadCheck(isolate, "v8::V8::SetUserObjectComparisonCallbackFunction()")) { + return; + } + isolate->SetUserObjectComparisonCallback(callback); +} + + void V8::AddObjectGroup(Persistent<Value>* objects, size_t length, RetainedObjectInfo* info) { |