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

📄 stub-cache.h.svn-base

📁 Google浏览器V8内核代码
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
  Address address() const { return address_; } private:  explicit SCTableReference(Address address) : address_(address) {}  static StubCache::Entry* first_entry(StubCache::Table table) {    switch (table) {      case StubCache::kPrimary: return StubCache::primary_;      case StubCache::kSecondary: return StubCache::secondary_;    }    UNREACHABLE();    return NULL;  }  Address address_;};// ------------------------------------------------------------------------// Support functions for IC stubs for callbacks.Object* LoadCallbackProperty(Arguments args);Object* StoreCallbackProperty(Arguments args);// Support functions for IC stubs for interceptors.Object* LoadInterceptorProperty(Arguments args);Object* StoreInterceptorProperty(Arguments args);Object* CallInterceptorProperty(Arguments args);// Support function for computing call IC miss stubs.Handle<Code> ComputeCallMiss(int argc);// The stub compiler compiles stubs for the stub cache.class StubCompiler BASE_EMBEDDED { public:  enum CheckType {    RECEIVER_MAP_CHECK,    STRING_CHECK,    NUMBER_CHECK,    BOOLEAN_CHECK,    JSARRAY_HAS_FAST_ELEMENTS_CHECK  };  StubCompiler() : masm_(NULL, 256) { }  Object* CompileCallInitialize(Code::Flags flags);  Object* CompileCallPreMonomorphic(Code::Flags flags);  Object* CompileCallNormal(Code::Flags flags);  Object* CompileCallMegamorphic(Code::Flags flags);  Object* CompileCallMiss(Code::Flags flags);  Object* CompileCallDebugBreak(Code::Flags flags);  Object* CompileCallDebugPrepareStepIn(Code::Flags flags);  Object* CompileLazyCompile(Code::Flags flags);  // Static functions for generating parts of stubs.  static void GenerateLoadGlobalFunctionPrototype(MacroAssembler* masm,                                                  int index,                                                  Register prototype);  static void GenerateLoadField(MacroAssembler* masm,                                JSObject* object,                                JSObject* holder,                                Register receiver,                                Register scratch1,                                Register scratch2,                                int index,                                Label* miss_label);  static void GenerateLoadCallback(MacroAssembler* masm,                                   JSObject* object,                                   JSObject* holder,                                   Register receiver,                                   Register name,                                   Register scratch1,                                   Register scratch2,                                   AccessorInfo* callback,                                   Label* miss_label);  static void GenerateLoadConstant(MacroAssembler* masm,                                   JSObject* object,                                   JSObject* holder,                                   Register receiver,                                   Register scratch1,                                   Register scratch2,                                   Object* value,                                   Label* miss_label);  static void GenerateLoadInterceptor(MacroAssembler* masm,                                      JSObject* object,                                      JSObject* holder,                                      Register receiver,                                      Register name,                                      Register scratch1,                                      Register scratch2,                                      Label* miss_label);  static void GenerateLoadArrayLength(MacroAssembler* masm,                                      Register receiver,                                      Register scratch,                                      Label* miss_label);  static void GenerateLoadShortStringLength(MacroAssembler* masm,                                            Register receiver,                                            Register scratch,                                            Label* miss_label);  static void GenerateLoadMediumStringLength(MacroAssembler* masm,                                             Register receiver,                                             Register scratch,                                             Label* miss_label);  static void GenerateLoadLongStringLength(MacroAssembler* masm,                                           Register receiver,                                           Register scratch,                                           Label* miss_label);  static void GenerateLoadFunctionPrototype(MacroAssembler* masm,                                            Register receiver,                                            Register scratch1,                                            Register scratch2,                                            Label* miss_label);  static void GenerateStoreField(MacroAssembler* masm,                                 JSObject* object,                                 int index,                                 Map* transition,                                 Register receiver_reg,                                 Register name_reg,                                 Register scratch,                                 Label* miss_label);  static void GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind); protected:  Object* GetCodeWithFlags(Code::Flags flags);  MacroAssembler* masm() { return &masm_; } private:  MacroAssembler masm_;};class LoadStubCompiler: public StubCompiler { public:  Object* CompileLoadField(JSObject* object, JSObject* holder, int index);  Object* CompileLoadCallback(JSObject* object,                              JSObject* holder,                              AccessorInfo* callback);  Object* CompileLoadConstant(JSObject* object,                              JSObject* holder,                              Object* value);  Object* CompileLoadInterceptor(JSObject* object,                                 JSObject* holder,                                 String* name); private:  Object* GetCode(PropertyType);};class KeyedLoadStubCompiler: public StubCompiler { public:  Object* CompileLoadField(String* name,                           JSObject* object,                           JSObject* holder,                           int index);  Object* CompileLoadCallback(String* name,                              JSObject* object,                              JSObject* holder,                              AccessorInfo* callback);  Object* CompileLoadConstant(String* name,                              JSObject* object,                              JSObject* holder,                              Object* value);  Object* CompileLoadInterceptor(JSObject* object,                                 JSObject* holder,                                 String* name);  Object* CompileLoadArrayLength(String* name);  Object* CompileLoadShortStringLength(String* name);  Object* CompileLoadMediumStringLength(String* name);  Object* CompileLoadLongStringLength(String* name);  Object* CompileLoadFunctionPrototype(String* name); private:  Object* GetCode(PropertyType);};class StoreStubCompiler: public StubCompiler { public:  Object* CompileStoreField(JSObject* object,                            int index,                            Map* transition,                            String* name);  Object* CompileStoreCallback(JSObject* object,                               AccessorInfo* callbacks,                               String* name);  Object* CompileStoreInterceptor(JSObject* object, String* name); private:  Object* GetCode(PropertyType type);};class KeyedStoreStubCompiler: public StubCompiler { public:  Object* CompileStoreField(JSObject* object,                            int index,                            Map* transition,                            String* name); private:  Object* GetCode(PropertyType type);};class CallStubCompiler: public StubCompiler { public:  explicit CallStubCompiler(int argc) : arguments_(argc) { }  Object* CompileCallField(Object* object, JSObject* holder, int index);  Object* CompileCallConstant(Object* object,                              JSObject* holder,                              JSFunction* function,                              CheckType check);  Object* CompileCallInterceptor(Object* object,                                 JSObject* holder,                                 String* name); private:  const ParameterCount arguments_;  const ParameterCount& arguments() { return arguments_; }  Object* GetCode(PropertyType type);};} }  // namespace v8::internal#endif  // V8_STUB_CACHE_H_

⌨️ 快捷键说明

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