diff options
Diffstat (limited to 'src/3rdparty/v8')
-rw-r--r-- | src/3rdparty/v8/src/ic.cc | 2 | ||||
-rw-r--r-- | src/3rdparty/v8/src/stub-cache.cc | 13 | ||||
-rw-r--r-- | src/3rdparty/v8/src/stub-cache.h | 5 |
3 files changed, 12 insertions, 8 deletions
diff --git a/src/3rdparty/v8/src/ic.cc b/src/3rdparty/v8/src/ic.cc index fbe77b0..3b6ec67 100644 --- a/src/3rdparty/v8/src/ic.cc +++ b/src/3rdparty/v8/src/ic.cc @@ -622,7 +622,7 @@ Handle<Code> CallICBase::ComputeMonomorphicStub(LookupResult* lookup, // applicable. if (!holder.is_identical_to(receiver)) return Handle<Code>::null(); return isolate()->stub_cache()->ComputeCallNormal( - argc, kind_, extra_state); + argc, kind_, extra_state, IsQmlGlobal(holder)); } break; } diff --git a/src/3rdparty/v8/src/stub-cache.cc b/src/3rdparty/v8/src/stub-cache.cc index 8b6e28f..9e7fe16 100644 --- a/src/3rdparty/v8/src/stub-cache.cc +++ b/src/3rdparty/v8/src/stub-cache.cc @@ -757,7 +757,8 @@ Handle<Code> StubCache::ComputeCallPreMonomorphic( Handle<Code> StubCache::ComputeCallNormal(int argc, Code::Kind kind, - Code::ExtraICState extra_state) { + Code::ExtraICState extra_state, + bool has_qml_global_receiver) { Code::Flags flags = Code::ComputeFlags(kind, MONOMORPHIC, extra_state, NORMAL, argc); Handle<NumberDictionary> cache = isolate_->factory()->non_monomorphic_cache(); @@ -765,7 +766,7 @@ Handle<Code> StubCache::ComputeCallNormal(int argc, if (entry != -1) return Handle<Code>(Code::cast(cache->ValueAt(entry))); StubCompiler compiler(isolate_); - Handle<Code> code = compiler.CompileCallNormal(flags); + Handle<Code> code = compiler.CompileCallNormal(flags, has_qml_global_receiver); FillCache(isolate_, code); return code; } @@ -1162,13 +1163,15 @@ Handle<Code> StubCompiler::CompileCallPreMonomorphic(Code::Flags flags) { } -Handle<Code> StubCompiler::CompileCallNormal(Code::Flags flags) { +Handle<Code> StubCompiler::CompileCallNormal(Code::Flags flags, bool has_qml_global_receiver) { int argc = Code::ExtractArgumentsCountFromFlags(flags); Code::Kind kind = Code::ExtractKindFromFlags(flags); if (kind == Code::CALL_IC) { - // Call normal is always with a explict receiver. + // Call normal is always with a explict receiver, + // or with an implicit qml global receiver. ASSERT(!CallIC::Contextual::decode( - Code::ExtractExtraICStateFromFlags(flags))); + Code::ExtractExtraICStateFromFlags(flags)) || + has_qml_global_receiver); CallIC::GenerateNormal(masm(), argc); } else { KeyedCallIC::GenerateNormal(masm(), argc); diff --git a/src/3rdparty/v8/src/stub-cache.h b/src/3rdparty/v8/src/stub-cache.h index cc42e05..725c70c 100644 --- a/src/3rdparty/v8/src/stub-cache.h +++ b/src/3rdparty/v8/src/stub-cache.h @@ -218,7 +218,8 @@ class StubCache { Handle<Code> ComputeCallNormal(int argc, Code::Kind kind, - Code::ExtraICState state); + Code::ExtraICState state, + bool has_qml_global_receiver); Handle<Code> ComputeCallArguments(int argc, Code::Kind kind); @@ -383,7 +384,7 @@ class StubCompiler BASE_EMBEDDED { // is extracted from the code flags. Handle<Code> CompileCallInitialize(Code::Flags flags); Handle<Code> CompileCallPreMonomorphic(Code::Flags flags); - Handle<Code> CompileCallNormal(Code::Flags flags); + Handle<Code> CompileCallNormal(Code::Flags flags, bool has_qml_global_receiver); Handle<Code> CompileCallMegamorphic(Code::Flags flags); Handle<Code> CompileCallArguments(Code::Flags flags); Handle<Code> CompileCallMiss(Code::Flags flags); |