Ignore:
Timestamp:
Jul 25, 2005, 3:17:20 PM (20 years ago)
Author:
mjs
Message:

JavaScriptCore:

Reviewed by Darin.

  • 10% speedup on JavaScript iBench
  • 5% speedup on 24fun BenchJS benchmark

Changed all get methods to getOwnProperty - they are no longer
responsible for prototype lookup, and determine if the property
was found as a side efect.

get() is now a nonvirtual ObjectImp method which calls the virtual
getOwnProperty and walks the prototype chain. A few selected
methods were inlined.

Changed ResolveNode::evaluate plus some other places to use
getProperty which does get() and hasProperty() in one lookup.

Also miscellaneous code cleanup.

  • bindings/objc/objc_runtime.h:
  • bindings/objc/objc_runtime.mm: (ObjcFallbackObjectImp::ObjcFallbackObjectImp): (ObjcFallbackObjectImp::getOwnProperty):
  • bindings/runtime_array.cpp: (RuntimeArrayImp::RuntimeArrayImp): (RuntimeArrayImp::getOwnProperty):
  • bindings/runtime_array.h:
  • bindings/runtime_method.cpp: (RuntimeMethodImp::getOwnProperty):
  • bindings/runtime_method.h:
  • bindings/runtime_object.cpp: (RuntimeObjectImp::getOwnProperty):
  • bindings/runtime_object.h:
  • kjs/array_instance.h:
  • kjs/array_object.cpp: (ArrayInstanceImp::getOwnProperty): (ArrayPrototypeImp::getOwnProperty): (ArrayProtoFuncImp::call):
  • kjs/array_object.h:
  • kjs/date_object.cpp: (DatePrototypeImp::getOwnProperty):
  • kjs/date_object.h:
  • kjs/function.cpp: (KJS::FunctionImp::getOwnProperty): (KJS::ArgumentsImp::getOwnProperty): (KJS::ActivationImp::getOwnProperty):
  • kjs/function.h:
  • kjs/lookup.h: (KJS::lookupGetOwnProperty): (KJS::lookupGetOwnFunction): (KJS::lookupGetOwnValue):
  • kjs/math_object.cpp: (MathObjectImp::getOwnProperty): (MathObjectImp::getValueProperty):
  • kjs/math_object.h:
  • kjs/nodes.cpp: (ResolveNode::evaluate):
  • kjs/number_object.cpp: (NumberObjectImp::getOwnProperty):
  • kjs/number_object.h:
  • kjs/object.cpp: (KJS::ObjectImp::get): (KJS::ObjectImp::getOwnProperty): (KJS::ObjectImp::getProperty):
  • kjs/object.h: (KJS::ObjectImp::getProperty): (KJS::ObjectImp::getOwnProperty):
  • kjs/object_object.cpp: (ObjectProtoFuncImp::call):
  • kjs/regexp_object.cpp: (RegExpObjectImp::getOwnProperty):
  • kjs/regexp_object.h:
  • kjs/string_object.cpp: (StringInstanceImp::getOwnProperty): (StringPrototypeImp::getOwnProperty):
  • kjs/string_object.h:

WebCore:

Reviewed by Darin.

  • 10% speedup on JavaScript iBench
  • 5% speedup on 24fun BenchJS benchmark

Changed all get methods to getOwnProperty - they are no longer responsible for
prototype lookup, and determine if the property was found as a side efect.

Also miscellaneous code cleanup.

  • khtml/ecma/kjs_css.cpp: (KJS::DOMCSSStyleDeclaration::getOwnProperty): (KJS::DOMStyleSheet::getOwnProperty): (KJS::DOMStyleSheetList::getOwnProperty): (KJS::DOMMediaList::getOwnProperty): (KJS::DOMCSSStyleSheet::getOwnProperty): (KJS::DOMCSSRuleList::getOwnProperty): (KJS::DOMCSSRule::getOwnProperty): (KJS::DOMCSSRule::getValueProperty): (KJS::CSSRuleConstructor::getOwnProperty): (KJS::DOMCSSValue::getOwnProperty): (KJS::CSSValueConstructor::getOwnProperty): (KJS::DOMCSSPrimitiveValue::getOwnProperty): (KJS::CSSPrimitiveValueConstructor::getOwnProperty): (KJS::DOMCSSValueList::getOwnProperty): (KJS::DOMRGBColor::getOwnProperty): (KJS::DOMRect::getOwnProperty): (KJS::DOMCounter::getOwnProperty):
  • khtml/ecma/kjs_css.h:
  • khtml/ecma/kjs_dom.cpp: (KJS::DOMNode::getOwnProperty): (KJS::DOMNodeList::getOwnProperty): (KJS::DOMAttr::getOwnProperty): (KJS::DOMDocument::getOwnProperty): (KJS::DOMElement::getOwnProperty): (KJS::DOMDocumentType::getOwnProperty): (KJS::DOMNamedNodeMap::getOwnProperty): (KJS::DOMProcessingInstruction::getOwnProperty): (KJS::DOMNotation::getOwnProperty): (KJS::DOMEntity::getOwnProperty): (KJS::NodeConstructor::getOwnProperty): (KJS::DOMExceptionConstructor::getOwnProperty): (KJS::DOMNamedNodesCollection::getOwnProperty): (KJS::DOMCharacterData::getOwnProperty):
  • khtml/ecma/kjs_dom.h:
  • khtml/ecma/kjs_events.cpp: (KJS::EventConstructor::getOwnProperty): (KJS::DOMEvent::getOwnProperty): (KJS::EventExceptionConstructor::getOwnProperty): (KJS::DOMUIEvent::getOwnProperty): (KJS::DOMMouseEvent::getOwnProperty): (KJS::DOMKeyboardEvent::getOwnProperty): (KJS::MutationEventConstructor::getOwnProperty): (KJS::DOMMutationEvent::getOwnProperty): (KJS::DOMWheelEvent::getOwnProperty): (KJS::Clipboard::getOwnProperty):
  • khtml/ecma/kjs_events.h:
  • khtml/ecma/kjs_html.cpp: (KJS::HTMLDocument::getOwnProperty): (KJS::KJS::HTMLElement::getOwnProperty): (KJS::KJS::HTMLCollection::getOwnProperty): (KJS::KJS::HTMLSelectCollection::getOwnProperty): (KJS::Image::getOwnProperty): (KJS::Context2D::getOwnProperty): (KJS::Gradient::getOwnProperty): (KJS::ImagePattern::getOwnProperty):
  • khtml/ecma/kjs_html.h:
  • khtml/ecma/kjs_navigator.cpp: (KJS::Plugin::Plugin): (KJS::Navigator::getOwnProperty): (KJS::Plugins::getOwnProperty): (KJS::MimeTypes::getOwnProperty): (KJS::Plugin::getOwnProperty): (KJS::MimeType::getOwnProperty):
  • khtml/ecma/kjs_navigator.h:
  • khtml/ecma/kjs_range.cpp: (KJS::DOMRange::getOwnProperty): (KJS::RangeConstructor::getOwnProperty):
  • khtml/ecma/kjs_range.h:
  • khtml/ecma/kjs_traversal.cpp: (KJS::DOMNodeIterator::getOwnProperty): (KJS::NodeFilterConstructor::getOwnProperty): (KJS::DOMTreeWalker::getOwnProperty):
  • khtml/ecma/kjs_traversal.h:
  • khtml/ecma/kjs_views.cpp: (KJS::DOMAbstractView::getOwnProperty):
  • khtml/ecma/kjs_views.h:
  • khtml/ecma/kjs_window.cpp: (KJS::Screen::getOwnProperty): (KJS::Window::~Window): (KJS::Window::getOwnProperty): (KJS::Window::put): (KJS::FrameArray::getOwnProperty): (KJS::Location::Location): (KJS::Location::getOwnProperty): (KJS::Location::put): (KJS::Selection::Selection): (KJS::Selection::getOwnProperty): (KJS::BarInfo::getOwnProperty): (KJS::History::getOwnProperty):
  • khtml/ecma/kjs_window.h:
  • khtml/ecma/xmlhttprequest.cpp: (KJS::XMLHttpRequest::getOwnProperty):
  • khtml/ecma/xmlhttprequest.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/function.cpp

    r9768 r9889  
    203203}
    204204
    205 Value FunctionImp::get(ExecState *exec, const Identifier &propertyName) const
     205bool FunctionImp::getOwnProperty(ExecState *exec, const Identifier& propertyName, Value& result) const
    206206{
    207207    // Find the arguments from the closest context.
     
    209209        ContextImp *context = exec->_context;
    210210        while (context) {
    211             if (context->function() == this)
    212                 return static_cast<ActivationImp *>
    213                     (context->activationObject())->get(exec, propertyName);
    214             context = context->callingContext();
     211          if (context->function() == this) {
     212            result = static_cast<ActivationImp *>(context->activationObject())->get(exec, propertyName);
     213            return true;
     214          }
     215          context = context->callingContext();
    215216        }
    216         return Null();
     217        result = Null();
     218        return true;
    217219    }
    218220   
     
    225227            p = p->next;
    226228        }
    227         return Number(count);
     229        result = Number(count);
     230        return true;
    228231    }
    229232   
    230     return InternalFunctionImp::get(exec, propertyName);
     233    return InternalFunctionImp::getOwnProperty(exec, propertyName, result);
    231234}
    232235
     
    441444}
    442445
    443 Value ArgumentsImp::get(ExecState *exec, const Identifier &propertyName) const
     446bool ArgumentsImp::getOwnProperty(ExecState *exec, const Identifier& propertyName, Value& result) const
    444447{
    445448  if (indexToNameMap.isMapped(propertyName)) {
    446     return _activationObject->get(exec, indexToNameMap[propertyName]);
    447   } else {
    448     return ObjectImp::get(exec, propertyName);
    449   }
     449    result = _activationObject->get(exec, indexToNameMap[propertyName]);
     450    return true;
     451  }
     452
     453  return ObjectImp::getOwnProperty(exec, propertyName, result);
    450454}
    451455
     
    489493}
    490494
    491 Value ActivationImp::get(ExecState *exec, const Identifier &propertyName) const
    492 {
     495bool ActivationImp::getOwnProperty(ExecState *exec, const Identifier& propertyName, Value& result) const
     496{
     497    // do this first so property map arguments property wins over the below
     498    if (ObjectImp::getOwnProperty(exec, propertyName, result))
     499        return true;
     500
    493501    if (propertyName == argumentsPropertyName) {
    494         // check for locally declared arguments property
    495         ValueImp *v = getDirect(propertyName);
    496         if (v)
    497             return Value(v);
    498 
    499502        // default: return builtin arguments array
    500503        if (!_argumentsObject)
    501                 createArgumentsObject(exec);
    502         return Value(_argumentsObject);
    503     }
    504     return ObjectImp::get(exec, propertyName);
     504            createArgumentsObject(exec);
     505
     506        result = Value(_argumentsObject);
     507        return true;
     508    }
     509
     510    return false;
    505511}
    506512
Note: See TracChangeset for help on using the changeset viewer.