📄 api.h.svn-base
字号:
// Copyright 2008 the V8 project authors. All rights reserved.// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met://// * Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.// * Redistributions in binary form must reproduce the above// copyright notice, this list of conditions and the following// disclaimer in the documentation and/or other materials provided// with the distribution.// * Neither the name of Google Inc. nor the names of its// contributors may be used to endorse or promote products derived// from this software without specific prior written permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#ifndef V8_API_H_#define V8_API_H_#include "factory.h"namespace v8 {// Constants used in the implementation of the API. The most natural thing// would usually be to place these with the classes that use them, but// we want to keep them out of v8.h because it is an externally// visible file.class Consts { public: enum TemplateType { FUNCTION_TEMPLATE = 0, OBJECT_TEMPLATE = 1 };};// Utilities for working with neander-objects, primitive// env-independent JSObjects used by the api.class NeanderObject { public: explicit NeanderObject(int size); inline NeanderObject(v8::internal::Handle<v8::internal::Object> obj); inline NeanderObject(v8::internal::Object* obj); inline v8::internal::Object* get(int index); inline void set(int index, v8::internal::Object* value); inline v8::internal::Handle<v8::internal::JSObject> value() { return value_; } int size(); private: v8::internal::Handle<v8::internal::JSObject> value_;};// Utilities for working with neander-arrays, a simple extensible// array abstraction built on neander-objects.class NeanderArray { public: NeanderArray(); inline NeanderArray(v8::internal::Handle<v8::internal::Object> obj); inline v8::internal::Handle<v8::internal::JSObject> value() { return obj_.value(); } void add(v8::internal::Handle<v8::internal::Object> value); int length(); v8::internal::Object* get(int index); // Change the value at an index to undefined value. If the index is // out of bounds, the request is ignored. Returns the old value. void set(int index, v8::internal::Object* value); private: NeanderObject obj_;};NeanderObject::NeanderObject(v8::internal::Handle<v8::internal::Object> obj) : value_(v8::internal::Handle<v8::internal::JSObject>::cast(obj)) { }NeanderObject::NeanderObject(v8::internal::Object* obj) : value_(v8::internal::Handle<v8::internal::JSObject>( v8::internal::JSObject::cast(obj))) { }NeanderArray::NeanderArray(v8::internal::Handle<v8::internal::Object> obj) : obj_(obj) { }v8::internal::Object* NeanderObject::get(int offset) { ASSERT(value()->HasFastElements()); return v8::internal::FixedArray::cast(value()->elements())->get(offset);}void NeanderObject::set(int offset, v8::internal::Object* value) { ASSERT(value_->HasFastElements()); v8::internal::FixedArray::cast(value_->elements())->set(offset, value);}template <typename T> static inline T ToCData(v8::internal::Object* obj) { STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address)); return reinterpret_cast<T>( reinterpret_cast<int>(v8::internal::Proxy::cast(obj)->proxy()));}template <typename T>static inline v8::internal::Handle<v8::internal::Object> FromCData(T obj) { STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address)); return v8::internal::Factory::NewProxy( reinterpret_cast<v8::internal::Address>(reinterpret_cast<int>(obj)));}v8::Arguments::Arguments(v8::Local<v8::Value> data, v8::Local<v8::Object> holder, v8::Local<v8::Function> callee, bool is_construct_call, void** values, int length) : data_(data), holder_(holder), callee_(callee), is_construct_call_(is_construct_call), values_(values), length_(length) { }enum ExtensionTraversalState { UNVISITED, VISITED, INSTALLED};class RegisteredExtension { public: explicit RegisteredExtension(Extension* extension); static void Register(RegisteredExtension* that); Extension* extension() { return extension_; } RegisteredExtension* next() { return next_; } RegisteredExtension* next_auto() { return next_auto_; } ExtensionTraversalState state() { return state_; } void set_state(ExtensionTraversalState value) { state_ = value; } static RegisteredExtension* first_extension() { return first_extension_; } private: Extension* extension_; RegisteredExtension* next_; RegisteredExtension* next_auto_; ExtensionTraversalState state_; static RegisteredExtension* first_extension_; static RegisteredExtension* first_auto_extension_;};class ImplementationUtilities { public: static v8::Handle<v8::Primitive> Undefined(); static v8::Handle<v8::Primitive> Null(); static v8::Handle<v8::Boolean> True(); static v8::Handle<v8::Boolean> False(); static int GetNameCount(ExtensionConfiguration* that) { return that->name_count_; } static const char** GetNames(ExtensionConfiguration* that) { return that->names_; } static v8::Arguments NewArguments(Local<Value> data, Local<Object> holder, Local<Function> callee, bool is_construct_call, void** argv, int argc) { return v8::Arguments(data, holder, callee, is_construct_call, argv, argc); } // Introduce an alias for the handle scope data to allow non-friends // to access the HandleScope data. typedef v8::HandleScope::Data HandleScopeData; static HandleScopeData* CurrentHandleScope() { return &v8::HandleScope::current_; }#ifdef DEBUG static void ZapHandleRange(void** begin, void** end) { v8::HandleScope::ZapRange(begin, end); }#endif};class Utils { public: static bool ReportApiFailure(const char* location, const char* message); static Local<FunctionTemplate> ToFunctionTemplate(NeanderObject obj); static Local<ObjectTemplate> ToObjectTemplate(NeanderObject obj); static inline Local<Context> ToLocal( v8::internal::Handle<v8::internal::Context> obj); static inline Local<Value> ToLocal( v8::internal::Handle<v8::internal::Object> obj); static inline Local<Function> ToLocal( v8::internal::Handle<v8::internal::JSFunction> obj); static inline Local<String> ToLocal( v8::internal::Handle<v8::internal::String> obj); static inline Local<Object> ToLocal( v8::internal::Handle<v8::internal::JSObject> obj); static inline Local<Array> ToLocal( v8::internal::Handle<v8::internal::JSArray> obj); static inline Local<External> ToLocal( v8::internal::Handle<v8::internal::Proxy> obj); static inline Local<Message> MessageToLocal( v8::internal::Handle<v8::internal::Object> obj); static inline Local<Number> NumberToLocal( v8::internal::Handle<v8::internal::Object> obj); static inline Local<Integer> IntegerToLocal( v8::internal::Handle<v8::internal::Object> obj); static inline Local<Uint32> Uint32ToLocal( v8::internal::Handle<v8::internal::Object> obj); static inline Local<FunctionTemplate> ToLocal( v8::internal::Handle<v8::internal::FunctionTemplateInfo> obj); static inline Local<ObjectTemplate> ToLocal( v8::internal::Handle<v8::internal::ObjectTemplateInfo> obj); static inline Local<Signature> ToLocal( v8::internal::Handle<v8::internal::SignatureInfo> obj); static inline Local<TypeSwitch> ToLocal( v8::internal::Handle<v8::internal::TypeSwitchInfo> obj); static inline v8::internal::Handle<v8::internal::TemplateInfo> OpenHandle(Template* that); static inline v8::internal::Handle<v8::internal::FunctionTemplateInfo> OpenHandle(FunctionTemplate* that); static inline v8::internal::Handle<v8::internal::ObjectTemplateInfo> OpenHandle(ObjectTemplate* that); static inline v8::internal::Handle<v8::internal::Object> OpenHandle(Data* data); static inline v8::internal::Handle<v8::internal::JSObject> OpenHandle(v8::Object* data); static inline v8::internal::Handle<v8::internal::JSArray> OpenHandle(v8::Array* data); static inline v8::internal::Handle<v8::internal::String> OpenHandle(String* data); static inline v8::internal::Handle<v8::internal::JSFunction> OpenHandle(Script* data); static inline v8::internal::Handle<v8::internal::JSFunction> OpenHandle(Function* data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -