コード例 #1
0
 private Object ensureId(int id) {
   Object[] array = valueArray;
   if (array == null) {
     synchronized (this) {
       array = valueArray;
       if (array == null) {
         array = new Object[maxId * SLOT_SPAN];
         valueArray = array;
         attributeArray = new short[maxId];
       }
     }
   }
   int valueSlot = (id - 1) * SLOT_SPAN + VALUE_SLOT;
   Object value = array[valueSlot];
   if (value == null) {
     if (id == constructorId) {
       initSlot(constructorId, "constructor", constructor, constructorAttrs);
       constructor = null; // no need to refer it any longer
     } else {
       obj.initPrototypeId(id);
     }
     value = array[valueSlot];
     if (value == null) {
       throw new IllegalStateException(
           obj.getClass().getName()
               + ".initPrototypeId(int id) "
               + "did not initialize id="
               + id);
     }
   }
   return value;
 }
コード例 #2
0
 final int findId(String name) {
   Object[] array = valueArray;
   if (array == null) {
     return obj.findPrototypeId(name);
   }
   int id = lastFoundId;
   if (name == array[(id - 1) * SLOT_SPAN + NAME_SLOT]) {
     return id;
   }
   id = obj.findPrototypeId(name);
   if (id != 0) {
     int nameSlot = (id - 1) * SLOT_SPAN + NAME_SLOT;
     // Make cache to work!
     array[nameSlot] = name;
     lastFoundId = id;
   }
   return id;
 }
コード例 #3
0
 final IdFunctionObject createPrecachedConstructor() {
   if (constructorId != 0) throw new IllegalStateException();
   constructorId = obj.findPrototypeId("constructor");
   if (constructorId == 0) {
     throw new IllegalStateException("No id for constructor property");
   }
   obj.initPrototypeId(constructorId);
   if (constructor == null) {
     throw new IllegalStateException(
         obj.getClass().getName()
             + ".initPrototypeId() did not "
             + "initialize id="
             + constructorId);
   }
   constructor.initFunction(obj.getClassName(), ScriptableObject.getTopLevelScope(obj));
   constructor.markAsConstructor(obj);
   return constructor;
 }
コード例 #4
0
    final void initValue(int id, String name, Object value, int attributes) {
      if (!(1 <= id && id <= maxId)) throw new IllegalArgumentException();
      if (name == null) throw new IllegalArgumentException();
      if (value == NOT_FOUND) throw new IllegalArgumentException();
      ScriptableObject.checkValidAttributes(attributes);
      if (obj.findPrototypeId(name) != id) throw new IllegalArgumentException(name);

      if (id == constructorId) {
        if (!(value instanceof IdFunctionObject)) {
          throw new IllegalArgumentException(
              "consructor should be initialized with IdFunctionObject");
        }
        constructor = (IdFunctionObject) value;
        constructorAttrs = (short) attributes;
        return;
      }

      initSlot(id, name, value, attributes);
    }