Index: src/stub-cache.cc |
diff --git a/src/stub-cache.cc b/src/stub-cache.cc |
index bd7163a2f1da676ad36bed0d8b24bd53e79e1887..b75ac8df4f106c9a29d44acf79eb73ae5654d203 100644 |
--- a/src/stub-cache.cc |
+++ b/src/stub-cache.cc |
@@ -171,6 +171,27 @@ Handle<Code> StubCache::ComputeLoadCallback(Handle<String> name, |
} |
+Handle<Code> StubCache::ComputeLoadViaGetter(Handle<String> name, |
+ Handle<JSObject> receiver, |
+ Handle<JSObject> holder, |
+ Handle<JSFunction> getter) { |
+ ASSERT(getter->IsSpecFunction()); |
Michael Starzinger
2012/06/08 07:58:33
Shouldn't that be getter->IsJSFunction() here, or
Sven Panne
2012/06/08 08:47:52
This was just a leftover of a previous weaker typi
|
+ ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP); |
+ // Note: map holder = receiver, CheckType = RECEIVER_MAP_CHECK; |
Michael Starzinger
2012/06/08 07:58:33
I don't understand this comment. Can we either tur
Sven Panne
2012/06/08 08:47:52
And this was just a leftover when trying to make s
|
+ Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, CALLBACKS); |
+ Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags)); |
+ if (probe->IsCode()) return Handle<Code>::cast(probe); |
+ |
+ LoadStubCompiler compiler(isolate_); |
+ Handle<Code> code = |
+ compiler.CompileLoadViaGetter(name, receiver, holder, getter); |
+ PROFILE(isolate_, CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name)); |
+ GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code)); |
+ JSObject::UpdateMapCodeCache(receiver, name, code); |
+ return code; |
+} |
+ |
+ |
Handle<Code> StubCache::ComputeLoadConstant(Handle<String> name, |
Handle<JSObject> receiver, |
Handle<JSObject> holder, |