Index: src/ic/accessor-assembler-impl.h |
diff --git a/src/ic/accessor-assembler-impl.h b/src/ic/accessor-assembler-impl.h |
index 8e6ad2cf816fd7d48e886a77766a01d93b37c72c..01e9bf18203ad669aeff6a4977ff19f459e2c1b3 100644 |
--- a/src/ic/accessor-assembler-impl.h |
+++ b/src/ic/accessor-assembler-impl.h |
@@ -19,16 +19,13 @@ using compiler::Node; |
#define ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE(V) \ |
V(LoadIC) \ |
V(LoadICTrampoline) \ |
- V(LoadICProtoArray) \ |
- V(LoadGlobalIC) \ |
- V(LoadGlobalICTrampoline) \ |
V(KeyedLoadICTF) \ |
V(KeyedLoadICTrampolineTF) \ |
V(KeyedLoadICMegamorphic) \ |
V(StoreIC) \ |
V(StoreICTrampoline) |
-// KeyedStoreIC and KeyedStoreICTrampoline need custom handling because of |
-// their "language_mode" parameter. |
+// The other IC entry points need custom handling because of additional |
+// parameters like "typeof_mode" or "language_mode". |
class AccessorAssemblerImpl : public CodeStubAssembler { |
public: |
@@ -40,6 +37,11 @@ class AccessorAssemblerImpl : public CodeStubAssembler { |
ACCESSOR_ASSEMBLER_PUBLIC_INTERFACE(DECLARE_PUBLIC_METHOD) |
#undef DECLARE_PUBLIC_METHOD |
+ void GenerateLoadICProtoArray(bool throw_reference_error_if_nonexistent); |
+ |
+ void GenerateLoadGlobalIC(TypeofMode typeof_mode); |
+ void GenerateLoadGlobalICTrampoline(TypeofMode typeof_mode); |
+ |
void GenerateKeyedStoreICTF(LanguageMode language_mode); |
void GenerateKeyedStoreICTrampolineTF(LanguageMode language_mode); |
@@ -88,8 +90,9 @@ class AccessorAssemblerImpl : public CodeStubAssembler { |
// Stub generation entry points. |
void LoadIC(const LoadICParameters* p); |
- void LoadICProtoArray(const LoadICParameters* p, Node* handler); |
- void LoadGlobalIC(const LoadICParameters* p); |
+ void LoadICProtoArray(const LoadICParameters* p, Node* handler, |
+ bool throw_reference_error_if_nonexistent); |
+ void LoadGlobalIC(const LoadICParameters* p, TypeofMode typeof_mode); |
void KeyedLoadIC(const LoadICParameters* p); |
void KeyedLoadICGeneric(const LoadICParameters* p); |
void StoreIC(const StoreICParameters* p); |
@@ -120,13 +123,22 @@ class AccessorAssemblerImpl : public CodeStubAssembler { |
Node* smi_handler, Label* miss, |
ElementSupport support_elements); |
- void HandleLoadICProtoHandler(const LoadICParameters* p, Node* handler, |
- Variable* var_holder, Variable* var_smi_handler, |
- Label* if_smi_handler, Label* miss); |
+ void HandleLoadICProtoHandlerCase(const LoadICParameters* p, Node* handler, |
+ Variable* var_holder, |
+ Variable* var_smi_handler, |
+ Label* if_smi_handler, Label* miss, |
+ bool throw_reference_error_if_nonexistent); |
Node* EmitLoadICProtoArrayCheck(const LoadICParameters* p, Node* handler, |
Node* handler_length, Node* handler_flags, |
- Label* miss); |
+ Label* miss, |
+ bool throw_reference_error_if_nonexistent); |
+ |
+ // LoadGlobalIC implementation. |
+ |
+ void HandleLoadGlobalICHandlerCase(const LoadICParameters* p, Node* handler, |
+ Label* miss, |
+ bool throw_reference_error_if_nonexistent); |
// StoreIC implementation. |