| Index: src/api.h
|
| diff --git a/src/api.h b/src/api.h
|
| index ea70dca8a5fbe27a2af63d93206ab88fcd72d238..7197b6cb546b83959c7714309c71dde278effeb0 100644
|
| --- a/src/api.h
|
| +++ b/src/api.h
|
| @@ -159,6 +159,27 @@ class RegisteredExtension {
|
| };
|
|
|
|
|
| +#define OPEN_HANDLE_LIST(V) \
|
| + V(Template, TemplateInfo) \
|
| + V(FunctionTemplate, FunctionTemplateInfo) \
|
| + V(ObjectTemplate, ObjectTemplateInfo) \
|
| + V(Signature, SignatureInfo) \
|
| + V(AccessorSignature, FunctionTemplateInfo) \
|
| + V(TypeSwitch, TypeSwitchInfo) \
|
| + V(Data, Object) \
|
| + V(RegExp, JSRegExp) \
|
| + V(Object, JSObject) \
|
| + V(Array, JSArray) \
|
| + V(String, String) \
|
| + V(Script, Object) \
|
| + V(Function, JSFunction) \
|
| + V(Message, JSObject) \
|
| + V(Context, Context) \
|
| + V(External, Foreign) \
|
| + V(StackTrace, JSArray) \
|
| + V(StackFrame, JSObject)
|
| +
|
| +
|
| class Utils {
|
| public:
|
| static bool ReportApiFailure(const char* location, const char* message);
|
| @@ -205,42 +226,13 @@ class Utils {
|
| static inline Local<TypeSwitch> ToLocal(
|
| v8::internal::Handle<v8::internal::TypeSwitchInfo> obj);
|
|
|
| - static inline v8::internal::Handle<v8::internal::TemplateInfo>
|
| - OpenHandle(const Template* that);
|
| - static inline v8::internal::Handle<v8::internal::FunctionTemplateInfo>
|
| - OpenHandle(const FunctionTemplate* that);
|
| - static inline v8::internal::Handle<v8::internal::ObjectTemplateInfo>
|
| - OpenHandle(const ObjectTemplate* that);
|
| - static inline v8::internal::Handle<v8::internal::Object>
|
| - OpenHandle(const Data* data);
|
| - static inline v8::internal::Handle<v8::internal::JSRegExp>
|
| - OpenHandle(const RegExp* data);
|
| - static inline v8::internal::Handle<v8::internal::JSObject>
|
| - OpenHandle(const v8::Object* data);
|
| - static inline v8::internal::Handle<v8::internal::JSArray>
|
| - OpenHandle(const v8::Array* data);
|
| - static inline v8::internal::Handle<v8::internal::String>
|
| - OpenHandle(const String* data);
|
| - static inline v8::internal::Handle<v8::internal::Object>
|
| - OpenHandle(const Script* data);
|
| - static inline v8::internal::Handle<v8::internal::JSFunction>
|
| - OpenHandle(const Function* data);
|
| - static inline v8::internal::Handle<v8::internal::JSObject>
|
| - OpenHandle(const Message* message);
|
| - static inline v8::internal::Handle<v8::internal::JSArray>
|
| - OpenHandle(const StackTrace* stack_trace);
|
| - static inline v8::internal::Handle<v8::internal::JSObject>
|
| - OpenHandle(const StackFrame* stack_frame);
|
| - static inline v8::internal::Handle<v8::internal::Context>
|
| - OpenHandle(const v8::Context* context);
|
| - static inline v8::internal::Handle<v8::internal::SignatureInfo>
|
| - OpenHandle(const v8::Signature* sig);
|
| - static inline v8::internal::Handle<v8::internal::FunctionTemplateInfo>
|
| - OpenHandle(const v8::AccessorSignature* sig);
|
| - static inline v8::internal::Handle<v8::internal::TypeSwitchInfo>
|
| - OpenHandle(const v8::TypeSwitch* that);
|
| - static inline v8::internal::Handle<v8::internal::Foreign>
|
| - OpenHandle(const v8::External* that);
|
| +#define DECLARE_OPEN_HANDLE(From, To) \
|
| + static inline v8::internal::Handle<v8::internal::To> \
|
| + OpenHandle(const From* that, bool allow_empty_handle = false);
|
| +
|
| +OPEN_HANDLE_LIST(DECLARE_OPEN_HANDLE)
|
| +
|
| +#undef DECLARE_OPEN_HANDLE
|
| };
|
|
|
|
|
| @@ -257,7 +249,7 @@ v8::internal::Handle<T> v8::internal::Handle<T>::EscapeFrom(
|
| if (!is_null()) {
|
| handle = *this;
|
| }
|
| - return Utils::OpenHandle(*scope->Close(Utils::ToLocal(handle)));
|
| + return Utils::OpenHandle(*scope->Close(Utils::ToLocal(handle)), true);
|
| }
|
|
|
|
|
| @@ -294,33 +286,18 @@ MAKE_TO_LOCAL(Uint32ToLocal, Object, Uint32)
|
|
|
| // Implementations of OpenHandle
|
|
|
| -#define MAKE_OPEN_HANDLE(From, To) \
|
| - v8::internal::Handle<v8::internal::To> Utils::OpenHandle(\
|
| - const v8::From* that) { \
|
| - return v8::internal::Handle<v8::internal::To>( \
|
| +#define MAKE_OPEN_HANDLE(From, To) \
|
| + v8::internal::Handle<v8::internal::To> Utils::OpenHandle( \
|
| + const v8::From* that, bool allow_empty_handle) { \
|
| + EXTRA_CHECK(allow_empty_handle || that != NULL); \
|
| + return v8::internal::Handle<v8::internal::To>( \
|
| reinterpret_cast<v8::internal::To**>(const_cast<v8::From*>(that))); \
|
| }
|
|
|
| -MAKE_OPEN_HANDLE(Template, TemplateInfo)
|
| -MAKE_OPEN_HANDLE(FunctionTemplate, FunctionTemplateInfo)
|
| -MAKE_OPEN_HANDLE(ObjectTemplate, ObjectTemplateInfo)
|
| -MAKE_OPEN_HANDLE(Signature, SignatureInfo)
|
| -MAKE_OPEN_HANDLE(AccessorSignature, FunctionTemplateInfo)
|
| -MAKE_OPEN_HANDLE(TypeSwitch, TypeSwitchInfo)
|
| -MAKE_OPEN_HANDLE(Data, Object)
|
| -MAKE_OPEN_HANDLE(RegExp, JSRegExp)
|
| -MAKE_OPEN_HANDLE(Object, JSObject)
|
| -MAKE_OPEN_HANDLE(Array, JSArray)
|
| -MAKE_OPEN_HANDLE(String, String)
|
| -MAKE_OPEN_HANDLE(Script, Object)
|
| -MAKE_OPEN_HANDLE(Function, JSFunction)
|
| -MAKE_OPEN_HANDLE(Message, JSObject)
|
| -MAKE_OPEN_HANDLE(Context, Context)
|
| -MAKE_OPEN_HANDLE(External, Foreign)
|
| -MAKE_OPEN_HANDLE(StackTrace, JSArray)
|
| -MAKE_OPEN_HANDLE(StackFrame, JSObject)
|
| +OPEN_HANDLE_LIST(MAKE_OPEN_HANDLE)
|
|
|
| #undef MAKE_OPEN_HANDLE
|
| +#undef OPEN_HANDLE_LIST
|
|
|
|
|
| namespace internal {
|
|
|