Exemplo n.º 1
0
 @Override
 public void defineOwnProperty(Context cx, Object key, ScriptableObject desc) {
   if (key instanceof String) {
     String name = (String) key;
     int info = findInstanceIdInfo(name);
     if (info != 0) {
       int id = (info & 0xFFFF);
       if (isAccessorDescriptor(desc)) {
         delete(id); // it will be replaced with a slot
       } else {
         int attr = (info >>> 16);
         Object value = getProperty(desc, "value");
         setInstanceIdValue(id, value == NOT_FOUND ? Undefined.instance : value);
         setAttributes(id, applyDescriptorToAttributeBitset(attr, desc));
         return;
       }
     }
     if (prototypeValues != null) {
       int id = prototypeValues.findId(name);
       if (id != 0) {
         if (isAccessorDescriptor(desc)) {
           prototypeValues.delete(id); // it will be replaced with a slot
         } else {
           int attr = prototypeValues.getAttributes(id);
           Object value = getProperty(desc, "value");
           prototypeValues.set(id, this, value == NOT_FOUND ? Undefined.instance : value);
           prototypeValues.setAttributes(id, applyDescriptorToAttributeBitset(attr, desc));
           return;
         }
       }
     }
   }
   super.defineOwnProperty(cx, key, desc);
 }
Exemplo n.º 2
0
  private ScriptableObject getBuiltInDescriptor(String name) {
    Object value = null;
    int attr = EMPTY;

    Scriptable scope = getParentScope();
    if (scope == null) {
      scope = this;
    }

    int info = findInstanceIdInfo(name);
    if (info != 0) {
      int id = (info & 0xFFFF);
      value = getInstanceIdValue(id);
      attr = (info >>> 16);
      return buildDataDescriptor(scope, value, attr);
    }
    if (prototypeValues != null) {
      int id = prototypeValues.findId(name);
      if (id != 0) {
        value = prototypeValues.get(id);
        attr = prototypeValues.getAttributes(id);
        return buildDataDescriptor(scope, value, attr);
      }
    }
    return null;
  }
Exemplo n.º 3
0
 @Override
 public int getAttributes(String name) {
   int info = findInstanceIdInfo(name);
   if (info != 0) {
     int attr = (info >>> 16);
     return attr;
   }
   if (prototypeValues != null) {
     int id = prototypeValues.findId(name);
     if (id != 0) {
       return prototypeValues.getAttributes(id);
     }
   }
   return super.getAttributes(name);
 }