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

📄 builtins.h.svn-base

📁 Google浏览器V8内核代码
💻 SVN-BASE
字号:
// Copyright 2006-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_BUILTINS_H_#define V8_BUILTINS_H_namespace v8 { namespace internal {// Define list of builtins implemented in C.#define BUILTIN_LIST_C(V)                          \  V(Illegal)                                       \                                                   \  V(EmptyFunction)                                 \                                                   \  V(ArrayCode)                                     \                                                   \  V(ArrayPush)                                     \  V(ArrayPop)                                      \                                                   \  V(HandleApiCall)                                 \  V(HandleApiCallAsFunction)// Define list of builtins implemented in assembly.#define BUILTIN_LIST_A(V)                                      \  V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED)        \  V(JSConstructCall,            BUILTIN, UNINITIALIZED)        \  V(JSEntryTrampoline,          BUILTIN, UNINITIALIZED)        \  V(JSConstructEntryTrampoline, BUILTIN, UNINITIALIZED)        \                                                               \  V(Return_DebugBreak,          BUILTIN, DEBUG_BREAK)          \  V(Return_DebugBreakEntry,     BUILTIN, DEBUG_BREAK)          \  V(ConstructCall_DebugBreak,   BUILTIN, DEBUG_BREAK)          \  V(StubNoRegisters_DebugBreak, BUILTIN, DEBUG_BREAK)          \                                                               \  V(LoadIC_Miss,                BUILTIN, UNINITIALIZED)        \  V(KeyedLoadIC_Miss,           BUILTIN, UNINITIALIZED)        \  V(StoreIC_Miss,               BUILTIN, UNINITIALIZED)        \  V(KeyedStoreIC_Miss,          BUILTIN, UNINITIALIZED)        \                                                               \  V(LoadIC_Initialize,          LOAD_IC, UNINITIALIZED)        \  V(LoadIC_PreMonomorphic,      LOAD_IC, PREMONOMORPHIC)       \  V(LoadIC_Normal,              LOAD_IC, MONOMORPHIC)          \  V(LoadIC_ArrayLength,         LOAD_IC, MONOMORPHIC)          \  V(LoadIC_ShortStringLength,   LOAD_IC, MONOMORPHIC)          \  V(LoadIC_MediumStringLength,  LOAD_IC, MONOMORPHIC)          \  V(LoadIC_LongStringLength,    LOAD_IC, MONOMORPHIC)          \  V(LoadIC_FunctionPrototype,   LOAD_IC, MONOMORPHIC)          \  V(LoadIC_Megamorphic,         LOAD_IC, MEGAMORPHIC)          \  V(LoadIC_DebugBreak,          LOAD_IC, DEBUG_BREAK)          \                                                               \  V(KeyedLoadIC_Initialize,     KEYED_LOAD_IC, UNINITIALIZED)  \  V(KeyedLoadIC_PreMonomorphic, KEYED_LOAD_IC, PREMONOMORPHIC) \  V(KeyedLoadIC_Generic,        KEYED_LOAD_IC, MEGAMORPHIC)    \  V(KeyedLoadIC_DebugBreak,     KEYED_LOAD_IC, DEBUG_BREAK)    \                                                               \  V(StoreIC_Initialize,         STORE_IC, UNINITIALIZED)       \  V(StoreIC_Megamorphic,        STORE_IC, MEGAMORPHIC)         \  V(StoreIC_DebugBreak,         STORE_IC, DEBUG_BREAK)         \                                                               \  V(KeyedStoreIC_Initialize,    KEYED_STORE_IC, UNINITIALIZED) \  V(KeyedStoreIC_Generic,       KEYED_STORE_IC, MEGAMORPHIC)   \  V(KeyedStoreIC_DebugBreak,    KEYED_STORE_IC, DEBUG_BREAK)   \                                                               \  /* Uses KeyedLoadIC_Initialize; must be after in list. */    \  V(FunctionCall,               BUILTIN, UNINITIALIZED)        \  V(FunctionApply,              BUILTIN, UNINITIALIZED)// Define list of builtins implemented in JavaScript.#define BUILTINS_LIST_JS(V)    \  V(EQUALS, 1)                 \  V(STRICT_EQUALS, 1)          \  V(COMPARE, 2)                \  V(ADD, 1)                    \  V(SUB, 1)                    \  V(MUL, 1)                    \  V(DIV, 1)                    \  V(MOD, 1)                    \  V(INC, 0)                    \  V(DEC, 0)                    \  V(BIT_OR, 1)                 \  V(BIT_AND, 1)                \  V(BIT_XOR, 1)                \  V(UNARY_MINUS, 0)            \  V(BIT_NOT, 0)                \  V(SHL, 1)                    \  V(SAR, 1)                    \  V(SHR, 1)                    \  V(DELETE, 1)                 \  V(IN, 1)                     \  V(INSTANCE_OF, 1)            \  V(GET_KEYS, 0)               \  V(FILTER_KEY, 1)             \  V(CALL_NON_FUNCTION, 0)      \  V(TO_OBJECT, 0)              \  V(TO_NUMBER, 0)              \  V(TO_STRING, 0)              \  V(APPLY_PREPARE, 1)          \  V(APPLY_OVERFLOW, 1)class ObjectVisitor;class Builtins : public AllStatic { public:  // Generate all builtin code objects. Should be called once during  // VM initialization.  static void Setup(bool create_heap_objects);  static void TearDown();  // Garbage collection support.  static void IterateBuiltins(ObjectVisitor* v);  // Disassembler support.  static const char* Lookup(byte* pc);  enum Name {#define DEF_ENUM_C(name) name,#define DEF_ENUM_A(name, kind, state) name,    BUILTIN_LIST_C(DEF_ENUM_C)    BUILTIN_LIST_A(DEF_ENUM_A)#undef DEF_ENUM_C#undef DEF_ENUM_A    builtin_count  };  enum CFunctionId {#define DEF_ENUM_C(name) c_##name,    BUILTIN_LIST_C(DEF_ENUM_C)#undef DEF_ENUM_C    cfunction_count  };  enum JavaScript {#define DEF_ENUM(name, ignore) name,    BUILTINS_LIST_JS(DEF_ENUM)#undef DEF_ENUM    id_count  };  static bool IsConstructCall(Address pc);  static bool IsArgumentsAdaptorCall(Address pc);  static Code* builtin(Name name) {    // Code::cast cannot be used here since we access builtins    // during the marking phase of mark sweep. See IC::Clear.    return reinterpret_cast<Code*>(builtins_[name]);  }  static Address builtin_address(Name name) {    return reinterpret_cast<Address>(&builtins_[name]);  }  static Address c_function_address(CFunctionId id) {    return c_functions_[id];  }  static const char* GetName(JavaScript id) { return javascript_names_[id]; }  static int GetArgumentsCount(JavaScript id) { return javascript_argc_[id]; }  static Handle<Code> GetCode(JavaScript id, bool* resolved);  static int NumberOfJavaScriptBuiltins() { return id_count; }  // Called from stub-cache.cc.  static void Generate_CallIC_DebugBreak(MacroAssembler* masm);  static Object* builtin_passed_function; private:  // The external C++ functions called from the code.  static Address c_functions_[cfunction_count];  // Note: These are always Code objects, but to conform with  // IterateBuiltins() above which assumes Object**'s for the callback  // function f, we use an Object* array here.  static Object* builtins_[builtin_count];  static const char* names_[builtin_count];  static const char* javascript_names_[id_count];  static int javascript_argc_[id_count];  // The offset from the beginning of the JSConstructCall builtin code  // object to the return address after the call. Used for determining  // if a call is a constructor invocation.  static int construct_call_pc_offset_;  static int arguments_adaptor_call_pc_offset_;  static void Generate_Adaptor(MacroAssembler* masm, CFunctionId id);  static void Generate_JSConstructCall(MacroAssembler* masm);  static void Generate_JSEntryTrampoline(MacroAssembler* masm);  static void Generate_JSConstructEntryTrampoline(MacroAssembler* masm);  static void Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm);  static void Generate_FunctionCall(MacroAssembler* masm);  static void Generate_FunctionApply(MacroAssembler* masm);  static void Generate_LoadIC_DebugBreak(MacroAssembler* masm);  static void Generate_StoreIC_DebugBreak(MacroAssembler* masm);  static void Generate_KeyedLoadIC_DebugBreak(MacroAssembler* masm);  static void Generate_KeyedStoreIC_DebugBreak(MacroAssembler* masm);  static void Generate_ConstructCall_DebugBreak(MacroAssembler* masm);  static void Generate_Return_DebugBreak(MacroAssembler* masm);  static void Generate_Return_DebugBreakEntry(MacroAssembler* masm);  static void Generate_StubNoRegisters_DebugBreak(MacroAssembler* masm);};} }  // namespace v8::internal#endif  // V8_BUILTINS_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -