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

Unified Diff: Source/bindings/v8/V8Binding.h

Issue 350863002: Replaced ToV8Value::toV8Value with V8ValueTraits::toV8Value. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Reverted Source/wtf change Created 6 years, 6 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 | « Source/bindings/v8/ScriptPromiseResolver.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/v8/V8Binding.h
diff --git a/Source/bindings/v8/V8Binding.h b/Source/bindings/v8/V8Binding.h
index 6f195da2b460bc59abc5fee2762f7c7fc5fbd934..15be404d68d83b0a127b1138d0e53f00b61a269d 100644
--- a/Source/bindings/v8/V8Binding.h
+++ b/Source/bindings/v8/V8Binding.h
@@ -219,14 +219,52 @@ inline v8::Handle<v8::Value> v8Undefined()
return v8::Handle<v8::Value>();
}
-template <class T>
+// Converts a DOM object to a v8 value.
+// This is a no-inline version of toV8(). If you want to call toV8()
+// without creating #include cycles, you can use this function instead.
+// Each specialized implementation will be generated.
+template<typename T>
+v8::Handle<v8::Value> toV8NoInline(T* impl, v8::Handle<v8::Object> creationContext, v8::Isolate*);
+
+template <typename T>
struct V8ValueTraits {
- // FIXME: This function requires the associated generated header to be
- // included. Also, this function does not match with other V8ValueTraits
- // classes. Remove this V8ValueTraits if possible.
- static inline v8::Handle<v8::Value> toV8Value(const T& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+ typedef typename WTF::RemovePointer<T>::Type TypeWithoutPointer;
+ static v8::Handle<v8::Value> toV8Value(TypeWithoutPointer* const& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
{
- return toV8(WTF::getPtr(value), creationContext, isolate);
+ return toV8NoInline(value, creationContext, isolate);
+ }
+
+ typedef typename WTF::RemoveTemplate<T, RawPtr>::Type TypeWithoutRawPtr;
+ static v8::Handle<v8::Value> toV8Value(const RawPtr<TypeWithoutRawPtr>& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+ {
+ return toV8NoInline(value.get(), creationContext, isolate);
+ }
+
+ // HeapVector<RefPtr> requires the following method:
+ typedef typename WTF::RemoveTemplate<T, RefPtr>::Type TypeWithoutRefPtr;
+ static v8::Handle<v8::Value> toV8Value(const RefPtr<TypeWithoutRefPtr>& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+ {
+ return toV8NoInline(value.get(), creationContext, isolate);
+ }
+
+ typedef typename WTF::RemoveTemplate<T, PassRefPtr>::Type TypeWithoutPassRefPtr;
+ static v8::Handle<v8::Value> toV8Value(const PassRefPtr<TypeWithoutPassRefPtr>& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+ {
+ return toV8NoInline(value.get(), creationContext, isolate);
+ }
+
+ typedef typename WTF::RemoveTemplate<T, Member>::Type TypeWithoutMember;
+ static v8::Handle<v8::Value> toV8Value(const Member<TypeWithoutMember>& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+ {
+ return toV8NoInline(value.get(), creationContext, isolate);
+ }
+};
+
+template <typename T, size_t inlineCapacity, typename Allocator>
+struct V8ValueTraits<WTF::Vector<T, inlineCapacity, Allocator> > {
+ static v8::Handle<v8::Value> toV8Value(const Vector<T, inlineCapacity, Allocator>& value, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate)
+ {
+ return v8ArrayNoInline(value, creationContext, isolate);
}
};
@@ -882,83 +920,6 @@ void moveEventListenerToNewWrapper(v8::Handle<v8::Object>, EventListener* oldVal
PassRefPtr<JSONValue> v8ToJSONValue(v8::Isolate*, v8::Handle<v8::Value>, int);
-// Converts a DOM object to a v8 value.
-// This is a no-inline version of toV8(). If you want to call toV8()
-// without creating #include cycles, you can use this function instead.
-// Each specialized implementation will be generated.
-template<typename T>
-v8::Handle<v8::Value> toV8NoInline(T* impl, v8::Handle<v8::Object> creationContext, v8::Isolate*);
-
-// ToV8Value<U, Context> is a class that converts a C++ object to a
-// v8 value. U has to be a class having a static method getCreationContext
-// which returns an object created from a target context.
-template<typename U, typename Context>
-class ToV8Value {
-public:
- template<typename T>
- static v8::Handle<v8::Value> toV8Value(const T& value, Context context, v8::Isolate* isolate)
- {
- // Default implementaion: for types that don't need the context.
- return V8ValueTraits<T>::toV8Value(value, context, isolate);
- }
-
- // Pointer specializations.
- template<typename T>
- static v8::Handle<v8::Value> toV8Value(T* const& value, Context context, v8::Isolate* isolate)
- {
- return toV8NoInline(value, context, isolate);
- }
- template<typename T>
- static v8::Handle<v8::Value> toV8Value(const RefPtr<T>& value, Context context, v8::Isolate* isolate)
- {
- return toV8Value(value.get(), context, isolate);
- }
- template<typename T>
- static v8::Handle<v8::Value> toV8Value(const PassRefPtr<T>& value, Context context, v8::Isolate* isolate)
- {
- return toV8Value(value.get(), context, isolate);
- }
- template<typename T>
- static v8::Handle<v8::Value> toV8Value(const OwnPtr<T>& value, Context context, v8::Isolate* isolate)
- {
- return toV8Value(value.get(), context, isolate);
- }
- template<typename T>
- static v8::Handle<v8::Value> toV8Value(const PassOwnPtr<T>& value, Context context, v8::Isolate* isolate)
- {
- return toV8Value(value.get(), context, isolate);
- }
- template<typename T>
- static v8::Handle<v8::Value> toV8Value(const RawPtr<T>& value, Context context, v8::Isolate* isolate)
- {
- return toV8Value(value.get(), context, isolate);
- }
-
- // const char* should use V8ValueTraits.
- static v8::Handle<v8::Value> toV8Value(const char* const& value, Context context, v8::Isolate* isolate)
- {
- return V8ValueTraits<const char*>::toV8Value(value, context, isolate);
- }
-
- template<typename T, size_t inlineCapacity>
- static v8::Handle<v8::Value> toV8Value(const Vector<T, inlineCapacity>& value, Context context, v8::Isolate* isolate)
- {
- return v8ArrayNoInline(value, context, isolate);
- }
-
- template<typename T, size_t inlineCapacity>
- static v8::Handle<v8::Value> toV8Value(const HeapVector<T, inlineCapacity>& value, Context context, v8::Isolate* isolate)
- {
- return v8ArrayNoInline(value, context, isolate);
- }
-
- template<typename T, size_t inlineCapacity>
- static v8::Handle<v8::Value> toV8Value(const PersistentHeapVector<T, inlineCapacity>& value, Context context, v8::Isolate* isolate)
- {
- return v8ArrayNoInline(static_cast<HeapVector<T, inlineCapacity> >(value), context, isolate);
- }
-};
-
// Result values for platform object 'deleter' methods,
// http://www.w3.org/TR/WebIDL/#delete
enum DeleteResult {
« no previous file with comments | « Source/bindings/v8/ScriptPromiseResolver.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698