Add template parameter to ReturnValue::Set.
E.g., v8-i18n wants to set the return value with a different type of a Persistent. BUG=NONE R=dcarney@chromium.org, svenpanne@chromium.org Review URL: https://codereview.chromium.org/16102002 Patch from Marja Hölttä <marja@chromium.org>. git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14826 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
6fda4e4c28
commit
f69727d849
12
include/v8.h
12
include/v8.h
@ -2779,8 +2779,8 @@ class ReturnValue {
|
||||
public:
|
||||
V8_INLINE(explicit ReturnValue(internal::Object** slot));
|
||||
// Handle setters
|
||||
V8_INLINE(void Set(const Persistent<T>& handle));
|
||||
V8_INLINE(void Set(const Handle<T> handle));
|
||||
template <typename S> V8_INLINE(void Set(const Persistent<S>& handle));
|
||||
template <typename S> V8_INLINE(void Set(const Handle<S> handle));
|
||||
// Fast primitive setters
|
||||
V8_INLINE(void Set(bool value));
|
||||
V8_INLINE(void Set(double i));
|
||||
@ -5684,12 +5684,16 @@ template<typename T>
|
||||
ReturnValue<T>::ReturnValue(internal::Object** slot) : value_(slot) {}
|
||||
|
||||
template<typename T>
|
||||
void ReturnValue<T>::Set(const Persistent<T>& handle) {
|
||||
template<typename S>
|
||||
void ReturnValue<T>::Set(const Persistent<S>& handle) {
|
||||
TYPE_CHECK(T, S);
|
||||
*value_ = *reinterpret_cast<internal::Object**>(*handle);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void ReturnValue<T>::Set(const Handle<T> handle) {
|
||||
template<typename S>
|
||||
void ReturnValue<T>::Set(const Handle<S> handle) {
|
||||
TYPE_CHECK(T, S);
|
||||
*value_ = *reinterpret_cast<internal::Object**>(*handle);
|
||||
}
|
||||
|
||||
|
@ -1074,6 +1074,12 @@ void FastReturnValueCallback<void>(
|
||||
}
|
||||
}
|
||||
|
||||
template<>
|
||||
void FastReturnValueCallback<Object>(
|
||||
const v8::FunctionCallbackInfo<v8::Value>& info) {
|
||||
info.GetReturnValue().Set(Object::New());
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Handle<Value> TestFastReturnValues() {
|
||||
LocalContext env;
|
||||
@ -1118,6 +1124,8 @@ THREADED_TEST(FastReturnValues) {
|
||||
CHECK(value->IsUndefined());
|
||||
}
|
||||
}
|
||||
value = TestFastReturnValues<Object>();
|
||||
CHECK(value->IsObject());
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user