| Index: Source/bindings/v8/V8Binding.h
|
| diff --git a/Source/bindings/v8/V8Binding.h b/Source/bindings/v8/V8Binding.h
|
| index 9df3459b72321a5246616c4f480e916c9c124d9b..6f75b324e77e7e46e62bc166807dcad409d15e8e 100644
|
| --- a/Source/bindings/v8/V8Binding.h
|
| +++ b/Source/bindings/v8/V8Binding.h
|
| @@ -34,6 +34,7 @@
|
|
|
| #include "bindings/v8/DOMWrapperWorld.h"
|
| #include "bindings/v8/ExceptionMessages.h"
|
| +#include "bindings/v8/ScriptValue.h"
|
| #include "bindings/v8/V8BindingMacros.h"
|
| #include "bindings/v8/V8PerIsolateData.h"
|
| #include "bindings/v8/V8StringResource.h"
|
| @@ -218,7 +219,10 @@ inline v8::Handle<v8::Value> v8Undefined()
|
|
|
| template <class T>
|
| struct V8ValueTraits {
|
| - static inline v8::Handle<v8::Value> arrayV8Value(const T& value, v8::Isolate* isolate)
|
| + // 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::Isolate* isolate)
|
| {
|
| return toV8(WTF::getPtr(value), v8::Handle<v8::Object>(), isolate);
|
| }
|
| @@ -226,7 +230,7 @@ struct V8ValueTraits {
|
|
|
| template<>
|
| struct V8ValueTraits<String> {
|
| - static inline v8::Handle<v8::Value> arrayV8Value(const String& value, v8::Isolate* isolate)
|
| + static inline v8::Handle<v8::Value> toV8Value(const String& value, v8::Isolate* isolate)
|
| {
|
| return v8String(isolate, value);
|
| }
|
| @@ -234,15 +238,47 @@ struct V8ValueTraits<String> {
|
|
|
| template<>
|
| struct V8ValueTraits<AtomicString> {
|
| - static inline v8::Handle<v8::Value> arrayV8Value(const AtomicString& value, v8::Isolate* isolate)
|
| + static inline v8::Handle<v8::Value> toV8Value(const AtomicString& value, v8::Isolate* isolate)
|
| + {
|
| + return v8String(isolate, value);
|
| + }
|
| +};
|
| +
|
| +template<size_t n>
|
| +struct V8ValueTraits<char[n]> {
|
| + static inline v8::Handle<v8::Value> toV8Value(char const (&value)[n], v8::Isolate* isolate)
|
| + {
|
| + return v8String(isolate, value);
|
| + }
|
| +};
|
| +
|
| +template<>
|
| +struct V8ValueTraits<const char*> {
|
| + static inline v8::Handle<v8::Value> toV8Value(const char* const& value, v8::Isolate* isolate)
|
| {
|
| return v8String(isolate, value);
|
| }
|
| };
|
|
|
| template<>
|
| +struct V8ValueTraits<int> {
|
| + static inline v8::Handle<v8::Value> toV8Value(const int& value, v8::Isolate* isolate)
|
| + {
|
| + return v8::Integer::New(isolate, value);
|
| + }
|
| +};
|
| +
|
| +template<>
|
| +struct V8ValueTraits<long> {
|
| + static inline v8::Handle<v8::Value> toV8Value(const long& value, v8::Isolate* isolate)
|
| + {
|
| + return v8::Integer::New(isolate, value);
|
| + }
|
| +};
|
| +
|
| +template<>
|
| struct V8ValueTraits<unsigned> {
|
| - static inline v8::Handle<v8::Value> arrayV8Value(const unsigned& value, v8::Isolate* isolate)
|
| + static inline v8::Handle<v8::Value> toV8Value(const unsigned& value, v8::Isolate* isolate)
|
| {
|
| return v8::Integer::NewFromUnsigned(isolate, value);
|
| }
|
| @@ -250,7 +286,7 @@ struct V8ValueTraits<unsigned> {
|
|
|
| template<>
|
| struct V8ValueTraits<unsigned long> {
|
| - static inline v8::Handle<v8::Value> arrayV8Value(const unsigned long& value, v8::Isolate* isolate)
|
| + static inline v8::Handle<v8::Value> toV8Value(const unsigned long& value, v8::Isolate* isolate)
|
| {
|
| return v8::Integer::NewFromUnsigned(isolate, value);
|
| }
|
| @@ -258,7 +294,7 @@ struct V8ValueTraits<unsigned long> {
|
|
|
| template<>
|
| struct V8ValueTraits<float> {
|
| - static inline v8::Handle<v8::Value> arrayV8Value(const float& value, v8::Isolate* isolate)
|
| + static inline v8::Handle<v8::Value> toV8Value(const float& value, v8::Isolate* isolate)
|
| {
|
| return v8::Number::New(isolate, value);
|
| }
|
| @@ -266,12 +302,64 @@ struct V8ValueTraits<float> {
|
|
|
| template<>
|
| struct V8ValueTraits<double> {
|
| - static inline v8::Handle<v8::Value> arrayV8Value(const double& value, v8::Isolate* isolate)
|
| + static inline v8::Handle<v8::Value> toV8Value(const double& value, v8::Isolate* isolate)
|
| {
|
| return v8::Number::New(isolate, value);
|
| }
|
| };
|
|
|
| +template<>
|
| +struct V8ValueTraits<bool> {
|
| + static inline v8::Handle<v8::Value> toV8Value(const bool& value, v8::Isolate* isolate)
|
| + {
|
| + return v8::Boolean::New(isolate, value);
|
| + }
|
| +};
|
| +
|
| +// V8NullType and V8UndefinedType are used only for the value conversion.
|
| +class V8NullType { };
|
| +class V8UndefinedType { };
|
| +
|
| +template<>
|
| +struct V8ValueTraits<V8NullType> {
|
| + static inline v8::Handle<v8::Value> toV8Value(const V8NullType&, v8::Isolate* isolate)
|
| + {
|
| + return v8::Null(isolate);
|
| + }
|
| +};
|
| +
|
| +template<>
|
| +struct V8ValueTraits<V8UndefinedType> {
|
| + static inline v8::Handle<v8::Value> toV8Value(const V8UndefinedType&, v8::Isolate* isolate)
|
| + {
|
| + return v8::Undefined(isolate);
|
| + }
|
| +};
|
| +
|
| +template<>
|
| +struct V8ValueTraits<ScriptValue> {
|
| + static inline v8::Handle<v8::Value> toV8Value(const ScriptValue& value, v8::Isolate*)
|
| + {
|
| + return value.v8Value();
|
| + }
|
| +};
|
| +
|
| +template<>
|
| +struct V8ValueTraits<v8::Handle<v8::Value> > {
|
| + static inline v8::Handle<v8::Value> toV8Value(const v8::Handle<v8::Value>& value, v8::Isolate*)
|
| + {
|
| + return value;
|
| + }
|
| +};
|
| +
|
| +template<>
|
| +struct V8ValueTraits<v8::Local<v8::Value> > {
|
| + static inline v8::Handle<v8::Value> toV8Value(const v8::Local<v8::Value>& value, v8::Isolate*)
|
| + {
|
| + return value;
|
| + }
|
| +};
|
| +
|
| template<typename T, size_t inlineCapacity>
|
| v8::Handle<v8::Value> v8Array(const Vector<T, inlineCapacity>& iterator, v8::Isolate* isolate)
|
| {
|
| @@ -280,7 +368,7 @@ v8::Handle<v8::Value> v8Array(const Vector<T, inlineCapacity>& iterator, v8::Iso
|
| typename Vector<T, inlineCapacity>::const_iterator end = iterator.end();
|
| typedef V8ValueTraits<T> TraitsType;
|
| for (typename Vector<T, inlineCapacity>::const_iterator iter = iterator.begin(); iter != end; ++iter)
|
| - result->Set(v8::Integer::New(isolate, index++), TraitsType::arrayV8Value(*iter, isolate));
|
| + result->Set(v8::Integer::New(isolate, index++), TraitsType::toV8Value(*iter, isolate));
|
| return result;
|
| }
|
|
|
| @@ -292,7 +380,7 @@ v8::Handle<v8::Value> v8Array(const HeapVector<T, inlineCapacity>& iterator, v8:
|
| typename HeapVector<T, inlineCapacity>::const_iterator end = iterator.end();
|
| typedef V8ValueTraits<T> TraitsType;
|
| for (typename HeapVector<T, inlineCapacity>::const_iterator iter = iterator.begin(); iter != end; ++iter)
|
| - result->Set(v8::Integer::New(isolate, index++), TraitsType::arrayV8Value(*iter, isolate));
|
| + result->Set(v8::Integer::New(isolate, index++), TraitsType::toV8Value(*iter, isolate));
|
| return result;
|
| }
|
|
|
|
|