📄 stub-cache.h.svn-base
字号:
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 + -