summaryrefslogtreecommitdiff
path: root/src/3rdparty/v8
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/v8')
-rw-r--r--src/3rdparty/v8/src/ic.cc2
-rw-r--r--src/3rdparty/v8/src/stub-cache.cc13
-rw-r--r--src/3rdparty/v8/src/stub-cache.h5
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);