Commit 50a4bb50 authored by verwaest@chromium.org's avatar verwaest@chromium.org

Remove the strict-mode flag from store handlers. It's only relevant to the IC stub.

R=mvstanton@chromium.org

Review URL: https://chromiumcodereview.appspot.com/91413003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18103 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 49627050
...@@ -1385,11 +1385,6 @@ static void Generate_StoreIC_Slow(MacroAssembler* masm) { ...@@ -1385,11 +1385,6 @@ static void Generate_StoreIC_Slow(MacroAssembler* masm) {
} }
static void Generate_StoreIC_Slow_Strict(MacroAssembler* masm) {
StoreIC::GenerateSlow(masm);
}
static void Generate_StoreIC_Initialize(MacroAssembler* masm) { static void Generate_StoreIC_Initialize(MacroAssembler* masm) {
StoreIC::GenerateInitialize(masm); StoreIC::GenerateInitialize(masm);
} }
...@@ -1420,11 +1415,6 @@ static void Generate_StoreIC_Normal(MacroAssembler* masm) { ...@@ -1420,11 +1415,6 @@ static void Generate_StoreIC_Normal(MacroAssembler* masm) {
} }
static void Generate_StoreIC_Normal_Strict(MacroAssembler* masm) {
StoreIC::GenerateNormal(masm);
}
static void Generate_StoreIC_Megamorphic(MacroAssembler* masm) { static void Generate_StoreIC_Megamorphic(MacroAssembler* masm) {
StoreIC::GenerateMegamorphic(masm, kNonStrictMode); StoreIC::GenerateMegamorphic(masm, kNonStrictMode);
} }
...@@ -1480,11 +1470,6 @@ static void Generate_KeyedStoreIC_Slow(MacroAssembler* masm) { ...@@ -1480,11 +1470,6 @@ static void Generate_KeyedStoreIC_Slow(MacroAssembler* masm) {
} }
static void Generate_KeyedStoreIC_Slow_Strict(MacroAssembler* masm) {
KeyedStoreIC::GenerateSlow(masm);
}
static void Generate_KeyedStoreIC_Initialize(MacroAssembler* masm) { static void Generate_KeyedStoreIC_Initialize(MacroAssembler* masm) {
KeyedStoreIC::GenerateInitialize(masm); KeyedStoreIC::GenerateInitialize(masm);
} }
...@@ -1667,13 +1652,14 @@ void Builtins::InitBuiltinFunctionTable() { ...@@ -1667,13 +1652,14 @@ void Builtins::InitBuiltinFunctionTable() {
functions->extra_args = NO_EXTRA_ARGUMENTS; \ functions->extra_args = NO_EXTRA_ARGUMENTS; \
++functions; ++functions;
#define DEF_FUNCTION_PTR_H(aname, kind, extra) \ #define DEF_FUNCTION_PTR_H(aname, kind) \
functions->generator = FUNCTION_ADDR(Generate_##aname); \ functions->generator = FUNCTION_ADDR(Generate_##aname); \
functions->c_code = NULL; \ functions->c_code = NULL; \
functions->s_name = #aname; \ functions->s_name = #aname; \
functions->name = k##aname; \ functions->name = k##aname; \
functions->flags = Code::ComputeFlags( \ functions->flags = Code::ComputeFlags( \
Code::HANDLER, MONOMORPHIC, extra, Code::NORMAL, Code::kind); \ Code::HANDLER, MONOMORPHIC, Code::kNoExtraICState, \
Code::NORMAL, Code::kind); \
functions->extra_args = NO_EXTRA_ARGUMENTS; \ functions->extra_args = NO_EXTRA_ARGUMENTS; \
++functions; ++functions;
...@@ -1805,7 +1791,7 @@ Handle<Code> Builtins::name() { \ ...@@ -1805,7 +1791,7 @@ Handle<Code> Builtins::name() { \
reinterpret_cast<Code**>(builtin_address(k##name)); \ reinterpret_cast<Code**>(builtin_address(k##name)); \
return Handle<Code>(code_address); \ return Handle<Code>(code_address); \
} }
#define DEFINE_BUILTIN_ACCESSOR_H(name, kind, extra) \ #define DEFINE_BUILTIN_ACCESSOR_H(name, kind) \
Handle<Code> Builtins::name() { \ Handle<Code> Builtins::name() { \
Code** code_address = \ Code** code_address = \
reinterpret_cast<Code**>(builtin_address(k##name)); \ reinterpret_cast<Code**>(builtin_address(k##name)); \
......
...@@ -217,15 +217,12 @@ enum BuiltinExtraArguments { ...@@ -217,15 +217,12 @@ enum BuiltinExtraArguments {
// Define list of builtin handlers implemented in assembly. // Define list of builtin handlers implemented in assembly.
#define BUILTIN_LIST_H(V) \ #define BUILTIN_LIST_H(V) \
V(LoadIC_Slow, LOAD_IC, Code::kNoExtraICState) \ V(LoadIC_Slow, LOAD_IC) \
V(KeyedLoadIC_Slow, KEYED_LOAD_IC, Code::kNoExtraICState) \ V(KeyedLoadIC_Slow, KEYED_LOAD_IC) \
V(StoreIC_Slow, STORE_IC, Code::kNoExtraICState) \ V(StoreIC_Slow, STORE_IC) \
V(StoreIC_Slow_Strict, STORE_IC, kStrictMode) \ V(KeyedStoreIC_Slow, KEYED_STORE_IC) \
V(KeyedStoreIC_Slow, KEYED_STORE_IC, Code::kNoExtraICState)\ V(LoadIC_Normal, LOAD_IC) \
V(KeyedStoreIC_Slow_Strict, KEYED_STORE_IC, kStrictMode) \ V(StoreIC_Normal, STORE_IC)
V(LoadIC_Normal, LOAD_IC, Code::kNoExtraICState) \
V(StoreIC_Normal, STORE_IC, Code::kNoExtraICState) \
V(StoreIC_Normal_Strict, STORE_IC, kStrictMode)
#ifdef ENABLE_DEBUGGER_SUPPORT #ifdef ENABLE_DEBUGGER_SUPPORT
// Define list of builtins used by the debugger implemented in assembly. // Define list of builtins used by the debugger implemented in assembly.
...@@ -314,7 +311,7 @@ class Builtins { ...@@ -314,7 +311,7 @@ class Builtins {
enum Name { enum Name {
#define DEF_ENUM_C(name, ignore) k##name, #define DEF_ENUM_C(name, ignore) k##name,
#define DEF_ENUM_A(name, kind, state, extra) k##name, #define DEF_ENUM_A(name, kind, state, extra) k##name,
#define DEF_ENUM_H(name, kind, extra) k##name, #define DEF_ENUM_H(name, kind) k##name,
BUILTIN_LIST_C(DEF_ENUM_C) BUILTIN_LIST_C(DEF_ENUM_C)
BUILTIN_LIST_A(DEF_ENUM_A) BUILTIN_LIST_A(DEF_ENUM_A)
BUILTIN_LIST_H(DEF_ENUM_H) BUILTIN_LIST_H(DEF_ENUM_H)
...@@ -341,7 +338,7 @@ class Builtins { ...@@ -341,7 +338,7 @@ class Builtins {
#define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name(); #define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name();
#define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \ #define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
Handle<Code> name(); Handle<Code> name();
#define DECLARE_BUILTIN_ACCESSOR_H(name, kind, extra) Handle<Code> name(); #define DECLARE_BUILTIN_ACCESSOR_H(name, kind) Handle<Code> name();
BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C) BUILTIN_LIST_C(DECLARE_BUILTIN_ACCESSOR_C)
BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A) BUILTIN_LIST_A(DECLARE_BUILTIN_ACCESSOR_A)
BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H) BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H)
......
...@@ -958,9 +958,8 @@ class LoadFieldStub: public HandlerStub { ...@@ -958,9 +958,8 @@ class LoadFieldStub: public HandlerStub {
class StoreGlobalStub : public HandlerStub { class StoreGlobalStub : public HandlerStub {
public: public:
StoreGlobalStub(StrictModeFlag strict_mode, bool is_constant) { explicit StoreGlobalStub(bool is_constant) {
bit_field_ = StrictModeBits::encode(strict_mode) | bit_field_ = IsConstantBits::encode(is_constant);
IsConstantBits::encode(is_constant);
} }
Handle<Code> GetCodeCopyFromTemplate(Isolate* isolate, Handle<Code> GetCodeCopyFromTemplate(Isolate* isolate,
...@@ -1003,9 +1002,8 @@ class StoreGlobalStub : public HandlerStub { ...@@ -1003,9 +1002,8 @@ class StoreGlobalStub : public HandlerStub {
virtual int NotMissMinorKey() { return GetExtraICState(); } virtual int NotMissMinorKey() { return GetExtraICState(); }
Major MajorKey() { return StoreGlobal; } Major MajorKey() { return StoreGlobal; }
class StrictModeBits: public BitField<StrictModeFlag, 0, 1> {}; class IsConstantBits: public BitField<bool, 0, 1> {};
class IsConstantBits: public BitField<bool, 1, 1> {}; class RepresentationBits: public BitField<Representation::Kind, 1, 8> {};
class RepresentationBits: public BitField<Representation::Kind, 2, 8> {};
int bit_field_; int bit_field_;
......
...@@ -1633,7 +1633,8 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup, ...@@ -1633,7 +1633,8 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup,
Handle<JSObject> receiver = Handle<JSObject>::cast(object); Handle<JSObject> receiver = Handle<JSObject>::cast(object);
Handle<JSObject> holder(lookup->holder()); Handle<JSObject> holder(lookup->holder());
StoreStubCompiler compiler(isolate(), strict_mode(), kind()); // Handlers do not use strict mode.
StoreStubCompiler compiler(isolate(), kNonStrictMode, kind());
switch (lookup->type()) { switch (lookup->type()) {
case FIELD: case FIELD:
return compiler.CompileStoreField(receiver, lookup, name); return compiler.CompileStoreField(receiver, lookup, name);
...@@ -1661,7 +1662,7 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup, ...@@ -1661,7 +1662,7 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup,
Handle<GlobalObject> global = Handle<GlobalObject>::cast(receiver); Handle<GlobalObject> global = Handle<GlobalObject>::cast(receiver);
Handle<PropertyCell> cell(global->GetPropertyCell(lookup), isolate()); Handle<PropertyCell> cell(global->GetPropertyCell(lookup), isolate());
Handle<Type> union_type = PropertyCell::UpdatedType(cell, value); Handle<Type> union_type = PropertyCell::UpdatedType(cell, value);
StoreGlobalStub stub(strict_mode(), union_type->IsConstant()); StoreGlobalStub stub(union_type->IsConstant());
Handle<Code> code = stub.GetCodeCopyFromTemplate( Handle<Code> code = stub.GetCodeCopyFromTemplate(
isolate(), receiver->map(), *cell); isolate(), receiver->map(), *cell);
...@@ -1670,9 +1671,7 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup, ...@@ -1670,9 +1671,7 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup,
return code; return code;
} }
ASSERT(holder.is_identical_to(receiver)); ASSERT(holder.is_identical_to(receiver));
return strict_mode() == kStrictMode return isolate()->builtins()->StoreIC_Normal();
? isolate()->builtins()->StoreIC_Normal_Strict()
: isolate()->builtins()->StoreIC_Normal();
case CALLBACKS: { case CALLBACKS: {
if (kind() == Code::KEYED_STORE_IC) break; if (kind() == Code::KEYED_STORE_IC) break;
Handle<Object> callback(lookup->GetCallbackObject(), isolate()); Handle<Object> callback(lookup->GetCallbackObject(), isolate());
......
...@@ -606,12 +606,8 @@ class StoreIC: public IC { ...@@ -606,12 +606,8 @@ class StoreIC: public IC {
} }
virtual Handle<Code> slow_stub() const { virtual Handle<Code> slow_stub() const {
if (strict_mode() == kStrictMode) {
return isolate()->builtins()->StoreIC_Slow_Strict();
} else {
return isolate()->builtins()->StoreIC_Slow(); return isolate()->builtins()->StoreIC_Slow();
} }
}
virtual Handle<Code> pre_monomorphic_stub() { virtual Handle<Code> pre_monomorphic_stub() {
return pre_monomorphic_stub(isolate(), strict_mode()); return pre_monomorphic_stub(isolate(), strict_mode());
...@@ -723,12 +719,8 @@ class KeyedStoreIC: public StoreIC { ...@@ -723,12 +719,8 @@ class KeyedStoreIC: public StoreIC {
} }
} }
virtual Handle<Code> slow_stub() const { virtual Handle<Code> slow_stub() const {
if (strict_mode() == kStrictMode) {
return isolate()->builtins()->KeyedStoreIC_Slow_Strict();
} else {
return isolate()->builtins()->KeyedStoreIC_Slow(); return isolate()->builtins()->KeyedStoreIC_Slow();
} }
}
virtual Handle<Code> megamorphic_stub() { virtual Handle<Code> megamorphic_stub() {
if (strict_mode() == kStrictMode) { if (strict_mode() == kStrictMode) {
return isolate()->builtins()->KeyedStoreIC_Generic_Strict(); return isolate()->builtins()->KeyedStoreIC_Generic_Strict();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment