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
This commit is contained in:
parent
49627050d0
commit
50a4bb5084
@ -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) {
|
||||
StoreIC::GenerateInitialize(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) {
|
||||
StoreIC::GenerateMegamorphic(masm, kNonStrictMode);
|
||||
}
|
||||
@ -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) {
|
||||
KeyedStoreIC::GenerateInitialize(masm);
|
||||
}
|
||||
@ -1667,13 +1652,14 @@ void Builtins::InitBuiltinFunctionTable() {
|
||||
functions->extra_args = NO_EXTRA_ARGUMENTS; \
|
||||
++functions;
|
||||
|
||||
#define DEF_FUNCTION_PTR_H(aname, kind, extra) \
|
||||
#define DEF_FUNCTION_PTR_H(aname, kind) \
|
||||
functions->generator = FUNCTION_ADDR(Generate_##aname); \
|
||||
functions->c_code = NULL; \
|
||||
functions->s_name = #aname; \
|
||||
functions->name = k##aname; \
|
||||
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;
|
||||
|
||||
@ -1805,7 +1791,7 @@ Handle<Code> Builtins::name() { \
|
||||
reinterpret_cast<Code**>(builtin_address(k##name)); \
|
||||
return Handle<Code>(code_address); \
|
||||
}
|
||||
#define DEFINE_BUILTIN_ACCESSOR_H(name, kind, extra) \
|
||||
#define DEFINE_BUILTIN_ACCESSOR_H(name, kind) \
|
||||
Handle<Code> Builtins::name() { \
|
||||
Code** code_address = \
|
||||
reinterpret_cast<Code**>(builtin_address(k##name)); \
|
||||
|
@ -216,16 +216,13 @@ enum BuiltinExtraArguments {
|
||||
CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V)
|
||||
|
||||
// Define list of builtin handlers implemented in assembly.
|
||||
#define BUILTIN_LIST_H(V) \
|
||||
V(LoadIC_Slow, LOAD_IC, Code::kNoExtraICState) \
|
||||
V(KeyedLoadIC_Slow, KEYED_LOAD_IC, Code::kNoExtraICState) \
|
||||
V(StoreIC_Slow, STORE_IC, Code::kNoExtraICState) \
|
||||
V(StoreIC_Slow_Strict, STORE_IC, kStrictMode) \
|
||||
V(KeyedStoreIC_Slow, KEYED_STORE_IC, Code::kNoExtraICState)\
|
||||
V(KeyedStoreIC_Slow_Strict, KEYED_STORE_IC, kStrictMode) \
|
||||
V(LoadIC_Normal, LOAD_IC, Code::kNoExtraICState) \
|
||||
V(StoreIC_Normal, STORE_IC, Code::kNoExtraICState) \
|
||||
V(StoreIC_Normal_Strict, STORE_IC, kStrictMode)
|
||||
#define BUILTIN_LIST_H(V) \
|
||||
V(LoadIC_Slow, LOAD_IC) \
|
||||
V(KeyedLoadIC_Slow, KEYED_LOAD_IC) \
|
||||
V(StoreIC_Slow, STORE_IC) \
|
||||
V(KeyedStoreIC_Slow, KEYED_STORE_IC) \
|
||||
V(LoadIC_Normal, LOAD_IC) \
|
||||
V(StoreIC_Normal, STORE_IC)
|
||||
|
||||
#ifdef ENABLE_DEBUGGER_SUPPORT
|
||||
// Define list of builtins used by the debugger implemented in assembly.
|
||||
@ -314,7 +311,7 @@ class Builtins {
|
||||
enum Name {
|
||||
#define DEF_ENUM_C(name, ignore) 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_A(DEF_ENUM_A)
|
||||
BUILTIN_LIST_H(DEF_ENUM_H)
|
||||
@ -341,7 +338,7 @@ class Builtins {
|
||||
#define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name();
|
||||
#define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
|
||||
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_A(DECLARE_BUILTIN_ACCESSOR_A)
|
||||
BUILTIN_LIST_H(DECLARE_BUILTIN_ACCESSOR_H)
|
||||
|
@ -958,9 +958,8 @@ class LoadFieldStub: public HandlerStub {
|
||||
|
||||
class StoreGlobalStub : public HandlerStub {
|
||||
public:
|
||||
StoreGlobalStub(StrictModeFlag strict_mode, bool is_constant) {
|
||||
bit_field_ = StrictModeBits::encode(strict_mode) |
|
||||
IsConstantBits::encode(is_constant);
|
||||
explicit StoreGlobalStub(bool is_constant) {
|
||||
bit_field_ = IsConstantBits::encode(is_constant);
|
||||
}
|
||||
|
||||
Handle<Code> GetCodeCopyFromTemplate(Isolate* isolate,
|
||||
@ -1003,9 +1002,8 @@ class StoreGlobalStub : public HandlerStub {
|
||||
virtual int NotMissMinorKey() { return GetExtraICState(); }
|
||||
Major MajorKey() { return StoreGlobal; }
|
||||
|
||||
class StrictModeBits: public BitField<StrictModeFlag, 0, 1> {};
|
||||
class IsConstantBits: public BitField<bool, 1, 1> {};
|
||||
class RepresentationBits: public BitField<Representation::Kind, 2, 8> {};
|
||||
class IsConstantBits: public BitField<bool, 0, 1> {};
|
||||
class RepresentationBits: public BitField<Representation::Kind, 1, 8> {};
|
||||
|
||||
int bit_field_;
|
||||
|
||||
|
@ -1633,7 +1633,8 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup,
|
||||
Handle<JSObject> receiver = Handle<JSObject>::cast(object);
|
||||
|
||||
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()) {
|
||||
case FIELD:
|
||||
return compiler.CompileStoreField(receiver, lookup, name);
|
||||
@ -1661,7 +1662,7 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup,
|
||||
Handle<GlobalObject> global = Handle<GlobalObject>::cast(receiver);
|
||||
Handle<PropertyCell> cell(global->GetPropertyCell(lookup), isolate());
|
||||
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(
|
||||
isolate(), receiver->map(), *cell);
|
||||
@ -1670,9 +1671,7 @@ Handle<Code> StoreIC::CompileHandler(LookupResult* lookup,
|
||||
return code;
|
||||
}
|
||||
ASSERT(holder.is_identical_to(receiver));
|
||||
return strict_mode() == kStrictMode
|
||||
? isolate()->builtins()->StoreIC_Normal_Strict()
|
||||
: isolate()->builtins()->StoreIC_Normal();
|
||||
return isolate()->builtins()->StoreIC_Normal();
|
||||
case CALLBACKS: {
|
||||
if (kind() == Code::KEYED_STORE_IC) break;
|
||||
Handle<Object> callback(lookup->GetCallbackObject(), isolate());
|
||||
|
12
src/ic.h
12
src/ic.h
@ -606,11 +606,7 @@ class StoreIC: public IC {
|
||||
}
|
||||
|
||||
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() {
|
||||
@ -723,11 +719,7 @@ class KeyedStoreIC: public StoreIC {
|
||||
}
|
||||
}
|
||||
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() {
|
||||
if (strict_mode() == kStrictMode) {
|
||||
|
Loading…
Reference in New Issue
Block a user