source: webkit/trunk/JavaScriptCore/runtime/PropertySlot.cpp@ 55002

Last change on this file since 55002 was 55002, checked in by [email protected], 15 years ago

2010-02-18 Oliver Hunt <[email protected]>

Reviewed by Gavin Barraclough.

Improve interpreter getter performance
https://bugs.webkit.org/show_bug.cgi?id=35138

Improve the performance of getter dispatch by making it possible
for the interpreter to cache the GetterSetter object lookup.

To do this we simply need to make PropertySlot aware of getters
as a potentially cacheable property, and record the base and this
objects for a getter access. This allows us to use more-or-less
identical code to that used by the normal get_by_id caching, with
the dispatch being the only actual difference.

I'm holding off of implementing this in the JIT until I do some
cleanup to try and making coding in the JIT not be as horrible
as it is currently.

  • bytecode/CodeBlock.cpp: (JSC::CodeBlock::dump): (JSC::CodeBlock::derefStructures): (JSC::CodeBlock::refStructures):
  • bytecode/Opcode.h:
  • interpreter/Interpreter.cpp: (JSC::Interpreter::resolveGlobal): (JSC::Interpreter::tryCacheGetByID): (JSC::Interpreter::privateExecute):
  • jit/JIT.cpp: (JSC::JIT::privateCompileMainPass):
  • jit/JITStubs.cpp: (JSC::JITThunks::tryCacheGetByID): (JSC::DEFINE_STUB_FUNCTION):
  • runtime/JSObject.cpp: (JSC::JSObject::fillGetterPropertySlot):
  • runtime/PropertySlot.cpp: (JSC::PropertySlot::functionGetter):
  • runtime/PropertySlot.h: (JSC::PropertySlot::isGetter): (JSC::PropertySlot::isCacheable): (JSC::PropertySlot::isCacheableValue): (JSC::PropertySlot::setValueSlot): (JSC::PropertySlot::setGetterSlot): (JSC::PropertySlot::setCacheableGetterSlot): (JSC::PropertySlot::clearOffset): (JSC::PropertySlot::thisValue):
  • Property svn:eol-style set to native
File size: 1.6 KB
Line 
1/*
2 * Copyright (C) 2005, 2008 Apple Inc. All rights reserved.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
13 *
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18 *
19 */
20
21#include "config.h"
22#include "PropertySlot.h"
23
24#include "JSFunction.h"
25#include "JSGlobalObject.h"
26
27namespace JSC {
28
29JSValue PropertySlot::functionGetter(ExecState* exec, const Identifier&, const PropertySlot& slot)
30{
31 // Prevent getter functions from observing execution if an exception is pending.
32 if (exec->hadException())
33 return exec->exception();
34
35 CallData callData;
36 CallType callType = slot.m_data.getterFunc->getCallData(callData);
37 if (callType == CallTypeHost)
38 return callData.native.function(exec, slot.m_data.getterFunc, slot.thisValue(), exec->emptyList());
39 ASSERT(callType == CallTypeJS);
40 // FIXME: Can this be done more efficiently using the callData?
41 return asFunction(slot.m_data.getterFunc)->call(exec, slot.thisValue(), exec->emptyList());
42}
43
44} // namespace JSC
Note: See TracBrowser for help on using the repository browser.