Changeset 11903 in webkit for trunk/JavaScriptCore/kjs


Ignore:
Timestamp:
Jan 6, 2006, 12:32:20 AM (19 years ago)
Author:
mjs
Message:

JavaScriptCore:

Reviewed by Eric.

  • kjs/function.cpp: (KJS::ActivationImp::getOwnPropertySlot): Implement directly, thus skipping getter/setter handling and proto handling, as well as inlining needed superclass stuff. (KJS::ActivationImp::put): Implement directly, skipping getter/setter, proto, and do canPut directly in PropertyMap::put since there's no static property table either.
  • kjs/function.h:
  • kjs/property_map.cpp: (KJS::PropertyMap::put): Allow optionally inlining canPut check.
  • kjs/property_map.h:

LayoutTests:

Reviewed by Eric.

  • fast/js/activation-proto-expected.txt: Added.
  • fast/js/activation-proto.html: Added.
Location:
trunk/JavaScriptCore/kjs
Files:
4 edited

Legend:

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

    r11566 r11903  
    509509{
    510510    // do this first so property map arguments property wins over the below
    511     if (JSObject::getOwnPropertySlot(exec, propertyName, slot))
     511    // we don't call JSObject because we won't have getter/setter properties
     512    // and we don't want to support __proto__
     513
     514    if (JSValue **location = getDirectLocation(propertyName)) {
     515        slot.setValueSlot(this, location);
    512516        return true;
     517    }
    513518
    514519    if (propertyName == exec->dynamicInterpreter()->argumentsIdentifier()) {
     
    525530        return false;
    526531    return JSObject::deleteProperty(exec, propertyName);
     532}
     533
     534void ActivationImp::put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr)
     535{
     536  // There's no way that an activation object can have a prototype or getter/setter properties
     537  assert(!_prop.hasGetterSetterProperties());
     538  assert(!_proto);
     539
     540  _prop.put(propertyName, value, attr, (attr == None || attr == DontDelete));
    527541}
    528542
  • trunk/JavaScriptCore/kjs/function.h

    r11566 r11903  
    127127
    128128    virtual bool getOwnPropertySlot(ExecState *exec, const Identifier &, PropertySlot&);
     129    virtual void put(ExecState *exec, const Identifier &propertyName, JSValue *value, int attr = None);
    129130    virtual bool deleteProperty(ExecState *exec, const Identifier &propertyName);
    130131
  • trunk/JavaScriptCore/kjs/property_map.cpp

    r11773 r11903  
    289289#endif
    290290
    291 void PropertyMap::put(const Identifier &name, JSValue *value, int attributes)
     291void PropertyMap::put(const Identifier &name, JSValue *value, int attributes, bool roCheck)
    292292{
    293293    assert(!name.isNull());
     
    308308        UString::Rep *key = _singleEntry.key;
    309309        if (key) {
    310             if (rep == key) {
     310            if (rep == key && !(roCheck && (_singleEntry.attributes & ReadOnly))) {
    311311                _singleEntry.value = value;
    312312                return;
     
    339339    while (UString::Rep *key = entries[i].key) {
    340340        if (rep == key) {
     341            if (roCheck && (_table->entries[i].attributes & ReadOnly))
     342                return;
    341343            // Put a new value in an existing hash table entry.
    342344            entries[i].value = value;
  • trunk/JavaScriptCore/kjs/property_map.h

    r11773 r11903  
    7676        void clear();
    7777       
    78         void put(const Identifier &name, JSValue *value, int attributes);
     78        void put(const Identifier &name, JSValue *value, int attributes, bool roCheck = false);
    7979        void remove(const Identifier &name);
    8080        JSValue *get(const Identifier &name) const;
Note: See TracChangeset for help on using the changeset viewer.