Ignore:
Timestamp:
Mar 18, 2007, 10:43:47 PM (18 years ago)
Author:
mjs
Message:

JavaScriptCore:

Reviewed by Mark.


  • avoid static construction (and global variable access) in a smarter, more portable way, to later enable MUTLI_THREAD mode to work on other platforms and compilers.


  • kjs/CommonIdentifiers.cpp: Added. New class to hold all the shared identifiers. (KJS::CommonIdentifiers::CommonIdentifiers): (KJS::CommonIdentifiers::shared):
  • kjs/CommonIdentifiers.h: Added.
  • kjs/ExecState.h: (KJS::ExecState::propertyNames): Hand the CommonIdentifiers instance here for easy access. (KJS::ExecState::ExecState):
  • API/JSObjectRef.cpp: (JSObjectMakeConstructor):
  • CMakeLists.txt:
  • JavaScriptCore.exp:
  • JavaScriptCore.pri:
  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • JavaScriptCoreSources.bkl:
  • bindings/runtime_array.cpp: (RuntimeArray::getOwnPropertySlot): (RuntimeArray::put):
  • bindings/runtime_method.cpp: (RuntimeMethod::getOwnPropertySlot):
  • kjs/array_object.cpp: (ArrayInstance::getOwnPropertySlot): (ArrayInstance::put): (ArrayInstance::deleteProperty): (ArrayProtoFunc::ArrayProtoFunc): (ArrayProtoFunc::callAsFunction): (ArrayObjectImp::ArrayObjectImp):
  • kjs/bool_object.cpp: (BooleanPrototype::BooleanPrototype): (BooleanProtoFunc::BooleanProtoFunc): (BooleanProtoFunc::callAsFunction): (BooleanObjectImp::BooleanObjectImp):
  • kjs/completion.h: (KJS::Completion::Completion):
  • kjs/date_object.cpp: (KJS::DateProtoFunc::DateProtoFunc): (KJS::DateObjectImp::DateObjectImp): (KJS::DateObjectFuncImp::DateObjectFuncImp):
  • kjs/error_object.cpp: (ErrorPrototype::ErrorPrototype): (ErrorProtoFunc::ErrorProtoFunc): (ErrorProtoFunc::callAsFunction): (ErrorObjectImp::ErrorObjectImp): (ErrorObjectImp::construct): (NativeErrorPrototype::NativeErrorPrototype): (NativeErrorImp::NativeErrorImp): (NativeErrorImp::construct): (NativeErrorImp::callAsFunction):
  • kjs/function.cpp: (KJS::FunctionImp::getOwnPropertySlot): (KJS::FunctionImp::put): (KJS::FunctionImp::deleteProperty): (KJS::FunctionImp::getParameterName): (KJS::DeclaredFunctionImp::construct): (KJS::IndexToNameMap::unMap): (KJS::Arguments::Arguments): (KJS::ActivationImp::getOwnPropertySlot): (KJS::ActivationImp::deleteProperty): (KJS::GlobalFuncImp::GlobalFuncImp):
  • kjs/function_object.cpp: (FunctionPrototype::FunctionPrototype): (FunctionProtoFunc::FunctionProtoFunc): (FunctionProtoFunc::callAsFunction): (FunctionObjectImp::FunctionObjectImp): (FunctionObjectImp::construct):
  • kjs/grammar.y:
  • kjs/identifier.cpp:
  • kjs/identifier.h:
  • kjs/interpreter.cpp: (KJS::Interpreter::init): (KJS::Interpreter::initGlobalObject):
  • kjs/interpreter.h:
  • kjs/lookup.h:
  • kjs/math_object.cpp: (MathFuncImp::MathFuncImp):
  • kjs/nodes.cpp: (ArrayNode::evaluate): (FuncDeclNode::processFuncDecl): (FuncExprNode::evaluate):
  • kjs/number_object.cpp: (NumberPrototype::NumberPrototype): (NumberProtoFunc::NumberProtoFunc): (NumberObjectImp::NumberObjectImp):
  • kjs/object.cpp: (KJS::JSObject::put): (KJS::JSObject::defaultValue): (KJS::JSObject::hasInstance):
  • kjs/object.h: (KJS::JSObject::getOwnPropertySlot):
  • kjs/object_object.cpp: (ObjectPrototype::ObjectPrototype): (ObjectProtoFunc::ObjectProtoFunc): (ObjectObjectImp::ObjectObjectImp):
  • kjs/regexp_object.cpp: (RegExpPrototype::RegExpPrototype): (RegExpProtoFunc::RegExpProtoFunc): (RegExpObjectImp::RegExpObjectImp):
  • kjs/string_object.cpp: (KJS::StringInstance::getOwnPropertySlot): (KJS::StringInstance::put): (KJS::StringInstance::deleteProperty): (KJS::StringPrototype::StringPrototype): (KJS::StringProtoFunc::StringProtoFunc): (KJS::StringProtoFunc::callAsFunction): (KJS::StringObjectImp::StringObjectImp): (KJS::StringObjectFuncImp::StringObjectFuncImp):
  • kjs/testkjs.cpp: (TestFunctionImp::TestFunctionImp):

WebCore:

Reviewed by Mark.

  • avoid static construction (and global variable access) in a smarter, more portable way, to later enable MUTLI_THREAD mode to work on other platforms and compilers.


  • bindings/js/JSCustomXPathNSResolver.cpp: (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
  • bindings/js/JSHTMLInputElementBase.cpp: (WebCore::JSHTMLInputElementBaseFunction::JSHTMLInputElementBaseFunction):
  • bindings/js/JSHTMLOptionElementConstructor.cpp: (WebCore::JSHTMLOptionElementConstructor::JSHTMLOptionElementConstructor):
  • bindings/js/JSXMLHttpRequest.cpp: (KJS::JSXMLHttpRequestConstructorImp::JSXMLHttpRequestConstructorImp):
  • bindings/js/JSXSLTProcessor.cpp: (KJS::XSLTProcessorConstructorImp::XSLTProcessorConstructorImp):
  • bindings/js/kjs_dom.cpp: (KJS::DOMNamedNodeMap::getOwnPropertySlot): (KJS::DOMNamedNodesCollection::getOwnPropertySlot):
  • bindings/js/kjs_events.cpp: (KJS::JSAbstractEventListener::handleEvent):
  • bindings/js/kjs_html.cpp: (KJS::HTMLElementFunction::HTMLElementFunction): (KJS::JSHTMLCollection::getOwnPropertySlot):
  • bindings/js/kjs_window.cpp: (KJS::ScheduledAction::execute):
  • bindings/objc/WebScriptObject.mm:
  • bindings/scripts/CodeGeneratorJS.pm:
File:
1 edited

Legend:

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

    r17610 r20310  
    9090bool ArrayInstance::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
    9191{
    92   if (propertyName == lengthPropertyName) {
     92  if (propertyName == exec->propertyNames().length) {
    9393    slot.setCustom(this, lengthGetter);
    9494    return true;
     
    131131
    132132// Special implementation of [[Put]] - see ECMA 15.4.5.1
    133 void ArrayInstance::put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr)
    134 {
    135   if (propertyName == lengthPropertyName) {
     133void ArrayInstance::put(ExecState* exec, const Identifier& propertyName, JSValue* value, int attr)
     134{
     135  if (propertyName == exec->propertyNames().length) {
    136136    unsigned int newLen = value->toUInt32(exec);
    137137    if (value->toNumber(exec) != double(newLen)) {
     
    179179}
    180180
    181 bool ArrayInstance::deleteProperty(ExecState *exec, const Identifier &propertyName)
    182 {
    183   if (propertyName == lengthPropertyName)
     181bool ArrayInstance::deleteProperty(ExecState* exec, const Identifier &propertyName)
     182{
     183  if (propertyName == exec->propertyNames().length)
    184184    return false;
    185185 
     
    436436// ------------------------------ ArrayProtoFunc ----------------------------
    437437
    438 ArrayProtoFunc::ArrayProtoFunc(ExecState *exec, int i, int len, const Identifier& name)
     438ArrayProtoFunc::ArrayProtoFunc(ExecState* exec, int i, int len, const Identifier& name)
    439439  : InternalFunctionImp(static_cast<FunctionPrototype*>
    440440                        (exec->lexicalInterpreter()->builtinFunctionPrototype()), name)
    441441  , id(i)
    442442{
    443   put(exec,lengthPropertyName,jsNumber(len),DontDelete|ReadOnly|DontEnum);
     443  put(exec, exec->propertyNames().length, jsNumber(len), DontDelete | ReadOnly | DontEnum);
    444444}
    445445
     
    453453
    454454// ECMA 15.4.4
    455 JSValue *ArrayProtoFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const List &args)
    456 {
    457   unsigned length = thisObj->get(exec,lengthPropertyName)->toUInt32(exec);
     455JSValue* ArrayProtoFunc::callAsFunction(ExecState* exec, JSObject* thisObj, const List& args)
     456{
     457  unsigned length = thisObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
    458458
    459459  JSValue *result = 0; // work around gcc 4.0 bug in uninitialized variable warning
     
    488488        if (id == ToLocaleString) {
    489489            JSObject* o = element->toObject(exec);
    490             JSValue* conversionFunction = o->get(exec, toLocaleStringPropertyName);
     490            JSValue* conversionFunction = o->get(exec, exec->propertyNames().toLocaleString);
    491491            if (conversionFunction->isObject() && static_cast<JSObject*>(conversionFunction)->implementsCall())
    492492                str += static_cast<JSObject*>(conversionFunction)->call(exec, o, List())->toString(exec);
     
    518518        // Older versions tried to optimize out getting the length of thisObj
    519519        // by checking for n != 0, but that doesn't work if thisObj is an empty array.
    520         length = curObj->get(exec,lengthPropertyName)->toUInt32(exec);
     520        length = curObj->get(exec, exec->propertyNames().length)->toUInt32(exec);
    521521        while (k < length) {
    522522          if (JSValue *v = getProperty(exec, curObj, k))
     
    534534      curObj = static_cast<JSObject *>(it++); // may be 0
    535535    }
    536     arr->put(exec,lengthPropertyName, jsNumber(n), DontEnum | DontDelete);
     536    arr->put(exec, exec->propertyNames().length, jsNumber(n), DontEnum | DontDelete);
    537537
    538538    result = arr;
     
    541541  case Pop:{
    542542    if (length == 0) {
    543       thisObj->put(exec, lengthPropertyName, jsNumber(length), DontEnum | DontDelete);
     543      thisObj->put(exec, exec->propertyNames().length, jsNumber(length), DontEnum | DontDelete);
    544544      result = jsUndefined();
    545545    } else {
    546546      result = thisObj->get(exec, length - 1);
    547       thisObj->put(exec, lengthPropertyName, jsNumber(length - 1), DontEnum | DontDelete);
     547      thisObj->put(exec, exec->propertyNames().length, jsNumber(length - 1), DontEnum | DontDelete);
    548548    }
    549549    break;
     
    553553      thisObj->put(exec, length + n, args[n]);
    554554    length += args.size();
    555     thisObj->put(exec,lengthPropertyName, jsNumber(length), DontEnum | DontDelete);
     555    thisObj->put(exec, exec->propertyNames().length, jsNumber(length), DontEnum | DontDelete);
    556556    result = jsNumber(length);
    557557    break;
     
    581581  case Shift: {
    582582    if (length == 0) {
    583       thisObj->put(exec, lengthPropertyName, jsNumber(length), DontEnum | DontDelete);
     583      thisObj->put(exec, exec->propertyNames().length, jsNumber(length), DontEnum | DontDelete);
    584584      result = jsUndefined();
    585585    } else {
     
    592592      }
    593593      thisObj->deleteProperty(exec, length - 1);
    594       thisObj->put(exec, lengthPropertyName, jsNumber(length - 1), DontEnum | DontDelete);
     594      thisObj->put(exec, exec->propertyNames().length, jsNumber(length - 1), DontEnum | DontDelete);
    595595    }
    596596    break;
     
    635635        resObj->put(exec, n, v);
    636636    }
    637     resObj->put(exec, lengthPropertyName, jsNumber(n), DontEnum | DontDelete);
     637    resObj->put(exec, exec->propertyNames().length, jsNumber(n), DontEnum | DontDelete);
    638638    break;
    639639  }
     
    662662
    663663    if (length == 0) {
    664       thisObj->put(exec, lengthPropertyName, jsNumber(0), DontEnum | DontDelete);
     664      thisObj->put(exec, exec->propertyNames().length, jsNumber(0), DontEnum | DontDelete);
    665665      result = thisObj;
    666666      break;
     
    728728        resObj->put(exec, k, v);
    729729    }
    730     resObj->put(exec, lengthPropertyName, jsNumber(deleteCount), DontEnum | DontDelete);
     730    resObj->put(exec, exec->propertyNames().length, jsNumber(deleteCount), DontEnum | DontDelete);
    731731
    732732    unsigned int additionalArgs = maxInt( args.size() - 2, 0 );
     
    760760      thisObj->put(exec, k+begin, args[k+2]);
    761761    }
    762     thisObj->put(exec, lengthPropertyName, jsNumber(length - deleteCount + additionalArgs), DontEnum | DontDelete);
     762    thisObj->put(exec, exec->propertyNames().length, jsNumber(length - deleteCount + additionalArgs), DontEnum | DontDelete);
    763763    break;
    764764  }
     
    775775      thisObj->put(exec, k, args[k]);
    776776    result = jsNumber(length + nrArgs);
    777     thisObj->put(exec, lengthPropertyName, result, DontEnum | DontDelete);
     777    thisObj->put(exec, exec->propertyNames().length, result, DontEnum | DontDelete);
    778778    break;
    779779  }
     
    936936{
    937937  // ECMA 15.4.3.1 Array.prototype
    938   put(exec, prototypePropertyName, arrayProto, DontEnum|DontDelete|ReadOnly);
     938  put(exec, exec->propertyNames().prototype, arrayProto, DontEnum|DontDelete|ReadOnly);
    939939
    940940  // no. of arguments for constructor
    941   put(exec, lengthPropertyName, jsNumber(1), ReadOnly|DontDelete|DontEnum);
     941  put(exec, exec->propertyNames().length, jsNumber(1), ReadOnly|DontDelete|DontEnum);
    942942}
    943943
Note: See TracChangeset for help on using the changeset viewer.