summaryrefslogtreecommitdiffstats
path: root/V8Binding/v8/v8_utility.h
diff options
context:
space:
mode:
Diffstat (limited to 'V8Binding/v8/v8_utility.h')
-rw-r--r--V8Binding/v8/v8_utility.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/V8Binding/v8/v8_utility.h b/V8Binding/v8/v8_utility.h
new file mode 100644
index 0000000..620c04c
--- /dev/null
+++ b/V8Binding/v8/v8_utility.h
@@ -0,0 +1,58 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef V8_UTILITY_H__
+#define V8_UTILITY_H__
+
+namespace WebCore {
+
+class AllowAllocation {
+ public:
+ inline AllowAllocation() {
+ m_prev = m_current;
+ m_current = true;
+ }
+ inline ~AllowAllocation() {
+ m_current = m_prev;
+ }
+ static bool m_current;
+ private:
+ bool m_prev;
+};
+
+class SafeAllocation {
+ public:
+ static inline v8::Local<v8::Object> NewInstance(
+ v8::Handle<v8::Function> fun);
+ static inline v8::Local<v8::Object> NewInstance(
+ v8::Handle<v8::ObjectTemplate> templ);
+ static inline v8::Local<v8::Object> NewInstance(
+ v8::Handle<v8::Function> fun, int argc, v8::Handle<v8::Value> argv[]);
+};
+
+v8::Local<v8::Object> SafeAllocation::NewInstance(
+ v8::Handle<v8::Function> fun) {
+ if (fun.IsEmpty())
+ return v8::Local<v8::Object>();
+ AllowAllocation allow;
+ return fun->NewInstance();
+}
+
+v8::Local<v8::Object> SafeAllocation::NewInstance(
+ v8::Handle<v8::ObjectTemplate> templ) {
+ if (templ.IsEmpty()) return v8::Local<v8::Object>();
+ AllowAllocation allow;
+ return templ->NewInstance();
+}
+
+v8::Local<v8::Object> SafeAllocation::NewInstance(
+ v8::Handle<v8::Function> fun, int argc, v8::Handle<v8::Value> argv[]) {
+ if (fun.IsEmpty()) return v8::Local<v8::Object>();
+ AllowAllocation allow;
+ return fun->NewInstance(argc, argv);
+}
+
+} // namespace WebCore
+
+#endif // V8_UTILITY_H__