⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 api.h.svn-base

📁 Google浏览器V8内核代码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
// 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 + -