Ignore:
Timestamp:
Aug 13, 2006, 8:06:14 PM (19 years ago)
Author:
mjs
Message:

JavaScriptCore:

Reviewed (and tweaked a little) by Maciej.


  • shrank the size of JSObject by 8 bytes and made the corresponding reduction to the cell size, resulting in a 1.2% speed improvement on JS iBench (and probably overall memory savings).

This was done by removing _scope and _internalValue data members
from JSObject and moving them only to the subclasses that actually
make use of them.


  • kjs/object.cpp: (KJS::JSObject::mark): No need to mark scope or internal value here.
  • kjs/object.h: (KJS::JSObject::JSObject): Don't initialize them.
  • kjs/JSWrapperObject.cpp: Added. New base class for object types that wrap primitive values (Number, String, Boolean, Date). (KJS::JSWrapperObject::mark):
  • kjs/JSWrapperObject.h: Added. (KJS::JSWrapperObject::JSWrapperObject): (KJS::JSWrapperObject::internalValue): (KJS::JSWrapperObject::setInternalValue):
  • kjs/array_object.cpp: (ArrayPrototype::ArrayPrototype): Don't set useless internal value.
  • kjs/bool_object.cpp: (BooleanInstance::BooleanInstance): Inherit from JSWrapperObject. (BooleanProtoFunc::callAsFunction): Fixed to account for fact that not all JSObjects have an internal value. (BooleanObjectImp::construct): ditto.
  • kjs/bool_object.h:
  • kjs/collector.cpp: Lowered cell size to 48. (KJS::Collector::allocate): meaningless whitespace change
  • kjs/date_object.cpp: (KJS::DateInstance::DateInstance): Inherit from JSWrapperObject. (KJS::DateProtoFunc::callAsFunction): adjusted for move of internalValue (KJS::DateObjectImp::construct): ditto
  • kjs/date_object.h:
  • kjs/error_object.cpp: (ErrorPrototype::ErrorPrototype): don't set internal value
  • kjs/function.cpp: move _scope and related handling here (KJS::FunctionImp::mark): mark scope
  • kjs/function.h: (KJS::FunctionImp::scope): moved here from JSObject (KJS::FunctionImp::setScope): ditto
  • kjs/number_object.cpp: (NumberInstance::NumberInstance): inherit from JSWrapperObject (NumberProtoFunc::callAsFunction): adjusted (NumberObjectImp::construct): adjusted
  • kjs/number_object.h: shring RegExp-related objects a little
  • kjs/regexp_object.cpp: (RegExpPrototype::RegExpPrototype): Adjust for size tweaks (RegExpObjectImp::RegExpObjectImp): ditto
  • kjs/regexp_object.h:
  • kjs/string_object.cpp: (StringInstance::StringInstance): inherit from JSWrapperObject (StringProtoFunc::callAsFunction): adjusted
  • kjs/string_object.h:
  • JavaScriptCore.exp: Exported new methods as needed.
  • JavaScriptCore.xcodeproj/project.pbxproj: Added new files to build.

WebCore:

Reviewed (and tweaked a little) by Maciej.


  • shrank the size of JSObject by 8 bytes and made the corresponding reduction to the cell size, resulting in a 1.2% speed improvement on JS iBench (and probably overall memory savings).

The WebCore part of this is to expect only FunctionImp to have a scope, not all JSObjects.


  • bindings/js/kjs_events.cpp: (KJS::JSLazyEventListener::parseCode):
File:
1 edited

Legend:

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

    r15757 r15846  
    363363
    364364DateInstance::DateInstance(JSObject *proto)
    365   : JSObject(proto)
     365  : JSWrapperObject(proto)
    366366{
    367367}
     
    535535    return throwError(exec, TypeError);
    536536
     537  DateInstance* thisDateObj = static_cast<DateInstance*>(thisObj);
     538
    537539  JSValue *result = 0;
    538540  UString s;
     
    545547  // FIXME: Where's the code to set the locale back to oldlocale?
    546548#endif
    547   JSValue *v = thisObj->internalValue();
     549  JSValue *v = thisDateObj->internalValue();
    548550  double milli = v->toNumber(exec);
    549551  if (isNaN(milli)) {
     
    646648    milli = roundValue(exec, args[0]);
    647649    result = jsNumber(milli);
    648     thisObj->setInternalValue(result);
     650    thisDateObj->setInternalValue(result);
    649651    break;
    650652  case SetMilliSeconds:
     
    678680      id == SetMonth || id == SetFullYear ) {
    679681    result = jsNumber(makeTime(&t, ms, utc));
    680     thisObj->setInternalValue(result);
     682    thisDateObj->setInternalValue(result);
    681683  }
    682684 
     
    735737  } else if (numArgs == 1) {
    736738    if (args[0]->isObject(&DateInstance::info))
    737       value = static_cast<JSObject*>(args[0])->internalValue()->toNumber(exec);
     739      value = static_cast<DateInstance*>(args[0])->internalValue()->toNumber(exec);
    738740    else {
    739741      JSValue* primitive = args[0]->toPrimitive(exec);
Note: See TracChangeset for help on using the changeset viewer.