Changeset 14477


Ignore:
Timestamp:
04/24/13 12:51:10 (10 years ago)
Author:
rschlatte
Message:

eliminate hardcoded slot locations in SlotDefinitionClass?.java

Location:
trunk/abcl/src/org/armedbear/lisp
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/SlotDefinition.java

    r14134 r14477  
    4242    super(StandardClass.STANDARD_SLOT_DEFINITION,
    4343          StandardClass.STANDARD_SLOT_DEFINITION.getClassLayout().getLength());
    44     slots[SlotDefinitionClass.SLOT_INDEX_LOCATION] = NIL;
    45     slots[SlotDefinitionClass.SLOT_INDEX_TYPE] = T;
    46     slots[SlotDefinitionClass.SLOT_INDEX_DOCUMENTATION] = NIL;
    47   }
    48 
    49     public SlotDefinition(StandardClass clazz) {
    50       // clazz layout needs to have SlotDefinitionClass layout as prefix
    51       // or indexed slot access won't work
    52         super(clazz, clazz.getClassLayout().getLength());
    53         slots[SlotDefinitionClass.SLOT_INDEX_LOCATION] = NIL;
    54     }
    55 
    56     public SlotDefinition(StandardClass clazz, LispObject name) {
    57       // clazz layout needs to have SlotDefinitionClass layout as prefix
    58       // or indexed slot access won't work
    59         super(clazz, clazz.getClassLayout().getLength());
    60         slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;
    61         slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL;
    62         slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] =
    63             new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()));
    64         slots[SlotDefinitionClass.SLOT_INDEX_READERS] = NIL;
    65         slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;
    66         slots[SlotDefinitionClass.SLOT_INDEX_LOCATION] = NIL;
    67         slots[SlotDefinitionClass.SLOT_INDEX_TYPE] = T;
    68         slots[SlotDefinitionClass.SLOT_INDEX_DOCUMENTATION] = NIL;
    69     }
    70 
     44    setInstanceSlotValue(Symbol.LOCATION, NIL);
     45    setInstanceSlotValue(Symbol._TYPE, T);
     46    setInstanceSlotValue(Symbol._DOCUMENTATION, NIL);
     47  }
     48
     49  public SlotDefinition(StandardClass clazz) {
     50    // clazz layout needs to have SlotDefinitionClass layout as prefix
     51    // or indexed slot access won't work
     52    super(clazz, clazz.getClassLayout().getLength());
     53    setInstanceSlotValue(Symbol.LOCATION, NIL);
     54  }
     55
     56  public SlotDefinition(StandardClass clazz, LispObject name) {
     57    // clazz layout needs to have SlotDefinitionClass layout as prefix
     58    // or indexed slot access won't work
     59    super(clazz, clazz.getClassLayout().getLength());
     60    Debug.assertTrue(name instanceof Symbol);
     61    setInstanceSlotValue(Symbol.NAME, name);
     62    setInstanceSlotValue(Symbol.INITFUNCTION, NIL);
     63    setInstanceSlotValue(Symbol.INITARGS,
     64                         new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())));
     65    setInstanceSlotValue(Symbol.READERS, NIL);
     66    setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE);
     67    setInstanceSlotValue(Symbol.LOCATION, NIL);
     68    setInstanceSlotValue(Symbol._TYPE, T);
     69    setInstanceSlotValue(Symbol._DOCUMENTATION, NIL);
     70  }
     71 
    7172  public SlotDefinition(LispObject name, LispObject readers)
    7273  {
    7374    this();
    7475    Debug.assertTrue(name instanceof Symbol);
    75     slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;
    76     slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL;
    77     slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] =
    78       new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()));
    79     slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers;
    80     slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;
     76    setInstanceSlotValue(Symbol.NAME, name);
     77    setInstanceSlotValue(Symbol.INITFUNCTION, NIL);
     78    setInstanceSlotValue(Symbol.INITARGS,
     79                         new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())));
     80    setInstanceSlotValue(Symbol.READERS, readers);
     81    setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE);
    8182  }
    8283
     
    8687    this();
    8788    Debug.assertTrue(name instanceof Symbol);
    88     slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;
    89     slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL;
    90     slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = initForm;
    91     slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] =
    92       new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()));
    93     slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers;
    94     slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;
     89    setInstanceSlotValue(Symbol.NAME, name);
     90    setInstanceSlotValue(Symbol.INITFUNCTION, NIL);
     91    setInstanceSlotValue(Symbol.INITFORM, initForm);
     92    setInstanceSlotValue(Symbol.INITARGS,
     93                         new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())));
     94    setInstanceSlotValue(Symbol.READERS, readers);
     95    setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE);
    9596  }
    9697
     
    100101    this();
    101102    Debug.assertTrue(name instanceof Symbol);
    102     slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;
    103     slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = initFunction;
    104     slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = NIL;
    105     slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] =
    106       new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()));
    107     slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers;
    108     slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;
     103    setInstanceSlotValue(Symbol.NAME, name);
     104    setInstanceSlotValue(Symbol.INITFUNCTION, initFunction);
     105    setInstanceSlotValue(Symbol.INITFORM, NIL);
     106    setInstanceSlotValue(Symbol.INITARGS,
     107                         new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())));
     108    setInstanceSlotValue(Symbol.READERS, readers);
     109    setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE);
    109110  }
    110111
     
    114115    this();
    115116    Debug.assertTrue(name instanceof Symbol);
    116     slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;
    117     slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = initFunction;
    118     slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = NIL;
    119     slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = initargs;
    120     slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers;
    121     slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;
     117    setInstanceSlotValue(Symbol.NAME, name);
     118    setInstanceSlotValue(Symbol.INITFUNCTION, initFunction);
     119    setInstanceSlotValue(Symbol.INITFORM, NIL);
     120    setInstanceSlotValue(Symbol.INITARGS, initargs);
     121    setInstanceSlotValue(Symbol.READERS, readers);
     122    setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE);
    122123  }
    123124
     
    132133    StringBuilder sb =
    133134      new StringBuilder(Symbol.SLOT_DEFINITION.printObject());
    134     LispObject name = slots[SlotDefinitionClass.SLOT_INDEX_NAME];
    135     if (name != null && name != NIL)
    136       {
    137         sb.append(' ');
    138         sb.append(name.printObject());
    139       }
     135    LispObject name = getInstanceSlotValue(Symbol.NAME);
     136    if (name != null && name != NIL) {
     137      sb.append(' ');
     138      sb.append(name.printObject());
     139    }
    140140    return unreadableString(sb.toString());
    141141  }
     
    177177    {
    178178      StandardObject o = checkSlotDefinition(arg);
    179       if (o instanceof SlotDefinition)
    180         return o.slots[SlotDefinitionClass.SLOT_INDEX_NAME];
    181       else
    182         return o.getInstanceSlotValue(Symbol.NAME);
     179      return o.getInstanceSlotValue(Symbol.NAME);
    183180    }
    184181  };
     
    199196    {
    200197      StandardObject o = checkSlotDefinition(first);
    201       if (o instanceof SlotDefinition)
    202         o.slots[SlotDefinitionClass.SLOT_INDEX_NAME] = second;
    203       else
    204         o.setInstanceSlotValue(Symbol.NAME, second);
     198      o.setInstanceSlotValue(Symbol.NAME, second);
    205199      return second;
    206200    }
     
    220214    {
    221215      StandardObject o = checkSlotDefinition(arg);
    222       if (o instanceof SlotDefinition)
    223         return o.slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION];
    224       else
    225         return o.getInstanceSlotValue(Symbol.INITFUNCTION);
     216      return o.getInstanceSlotValue(Symbol.INITFUNCTION);
    226217    }
    227218  };
     
    242233    {
    243234      StandardObject o = checkSlotDefinition(first);
    244       if (o instanceof SlotDefinition)
    245         o.slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = second;
    246       else
    247         o.setInstanceSlotValue(Symbol.INITFUNCTION, second);
     235      o.setInstanceSlotValue(Symbol.INITFUNCTION, second);
    248236      return second;
    249237    }
     
    264252    {
    265253      StandardObject o = checkSlotDefinition(arg);
    266       if (o instanceof SlotDefinition)
    267         return o.slots[SlotDefinitionClass.SLOT_INDEX_INITFORM];
    268       else
    269         return o.getInstanceSlotValue(Symbol.INITFORM);
     254      return o.getInstanceSlotValue(Symbol.INITFORM);
    270255    }
    271256  };
     
    286271    {
    287272      StandardObject o = checkSlotDefinition(first);
    288       if (o instanceof SlotDefinition)
    289         o.slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = second;
    290       else
    291         o.setInstanceSlotValue(Symbol.INITFORM, second);
     273      o.setInstanceSlotValue(Symbol.INITFORM, second);
    292274      return second;
    293275    }
     
    307289    {
    308290      StandardObject o = checkSlotDefinition(arg);
    309       if (o instanceof SlotDefinition)
    310         return o.slots[SlotDefinitionClass.SLOT_INDEX_INITARGS];
    311       else
    312         return o.getInstanceSlotValue(Symbol.INITARGS);
     291      return o.getInstanceSlotValue(Symbol.INITARGS);
    313292    }
    314293  };
     
    329308    {
    330309      StandardObject o = checkSlotDefinition(first);
    331       if (o instanceof SlotDefinition)
    332         o.slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = second;
    333       else
    334         o.setInstanceSlotValue(Symbol.INITARGS, second);
     310      o.setInstanceSlotValue(Symbol.INITARGS, second);
    335311      return second;
    336312    }
     
    351327    {
    352328      StandardObject o = checkSlotDefinition(arg);
    353       if (o instanceof SlotDefinition)
    354         return o.slots[SlotDefinitionClass.SLOT_INDEX_READERS];
    355       else
    356         return o.getInstanceSlotValue(Symbol.READERS);
     329      return o.getInstanceSlotValue(Symbol.READERS);
    357330    }
    358331  };
     
    373346    {
    374347      StandardObject o = checkSlotDefinition(first);
    375       if (o instanceof SlotDefinition)
    376         o.slots[SlotDefinitionClass.SLOT_INDEX_READERS] = second;
    377       else
    378         o.setInstanceSlotValue(Symbol.READERS, second);
     348      o.setInstanceSlotValue(Symbol.READERS, second);
    379349      return second;
    380350    }
     
    396366    {
    397367      StandardObject o = checkSlotDefinition(arg);
    398       if (o instanceof SlotDefinition)
    399         return o.slots[SlotDefinitionClass.SLOT_INDEX_WRITERS];
    400       else
    401         return o.getInstanceSlotValue(Symbol.WRITERS);
     368      return o.getInstanceSlotValue(Symbol.WRITERS);
    402369    }
    403370  };
     
    418385    {
    419386      StandardObject o = checkSlotDefinition(first);
    420       if (o instanceof SlotDefinition)
    421         o.slots[SlotDefinitionClass.SLOT_INDEX_WRITERS] = second;
    422       else
    423         o.setInstanceSlotValue(Symbol.WRITERS, second);
     387      o.setInstanceSlotValue(Symbol.WRITERS, second);
    424388      return second;
    425389    }
     
    441405    {
    442406      StandardObject o = checkSlotDefinition(arg);
    443       if (o instanceof SlotDefinition)
    444         return o.slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION];
    445       else
    446         return o.getInstanceSlotValue(Symbol.ALLOCATION);
     407      return o.getInstanceSlotValue(Symbol.ALLOCATION);
    447408    }
    448409  };
     
    463424    {
    464425      StandardObject o = checkSlotDefinition(first);
    465       if (o instanceof SlotDefinition)
    466         o.slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = second;
    467       else
    468         o.setInstanceSlotValue(Symbol.ALLOCATION, second);
     426      o.setInstanceSlotValue(Symbol.ALLOCATION, second);
    469427      return second;
    470428    }
     
    486444    {
    487445      StandardObject o = checkSlotDefinition(arg);
    488       if (o instanceof SlotDefinition)
    489         return o.slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION_CLASS];
    490       else
    491         return o.getInstanceSlotValue(Symbol.ALLOCATION_CLASS);
     446      return o.getInstanceSlotValue(Symbol.ALLOCATION_CLASS);
    492447    }
    493448  };
     
    508463    {
    509464      StandardObject o = checkSlotDefinition(first);
    510       if (o instanceof SlotDefinition)
    511         o.slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION_CLASS] = second;
    512       else
    513         o.setInstanceSlotValue(Symbol.ALLOCATION_CLASS, second);
     465      o.setInstanceSlotValue(Symbol.ALLOCATION_CLASS, second);
    514466      return second;
    515467    }
     
    529481    {
    530482      StandardObject o = checkSlotDefinition(arg);
    531       if (o instanceof SlotDefinition)
    532         return o.slots[SlotDefinitionClass.SLOT_INDEX_LOCATION];
    533       else
    534         return o.getInstanceSlotValue(Symbol.LOCATION);
     483      return o.getInstanceSlotValue(Symbol.LOCATION);
    535484    }
    536485  };
     
    551500    {
    552501      StandardObject o = checkSlotDefinition(first);
    553       if (o instanceof SlotDefinition)
    554         o.slots[SlotDefinitionClass.SLOT_INDEX_LOCATION] = second;
    555       else
    556         o.setInstanceSlotValue(Symbol.LOCATION, second);
     502      o.setInstanceSlotValue(Symbol.LOCATION, second);
    557503      return second;
    558504    }
     
    572518    {
    573519      StandardObject o = checkSlotDefinition(arg);
    574       if (o instanceof SlotDefinition)
    575         return o.slots[SlotDefinitionClass.SLOT_INDEX_TYPE];
    576       else
    577         return o.getInstanceSlotValue(Symbol._TYPE);
     520      return o.getInstanceSlotValue(Symbol._TYPE);
    578521    }
    579522  };
     
    594537    {
    595538      StandardObject o = checkSlotDefinition(first);
    596       if (o instanceof SlotDefinition)
    597         o.slots[SlotDefinitionClass.SLOT_INDEX_TYPE] = second;
    598       else
    599         o.setInstanceSlotValue(Symbol._TYPE, second);
     539      o.setInstanceSlotValue(Symbol._TYPE, second);
    600540      return second;
    601541    }
     
    615555    {
    616556      StandardObject o = checkSlotDefinition(arg);
    617       if (o instanceof SlotDefinition)
    618         return o.slots[SlotDefinitionClass.SLOT_INDEX_DOCUMENTATION];
    619       else
    620         return o.getInstanceSlotValue(Symbol._DOCUMENTATION);
     557      return o.getInstanceSlotValue(Symbol._DOCUMENTATION);
    621558    }
    622559  };
     
    637574    {
    638575      StandardObject o = checkSlotDefinition(first);
    639       if (o instanceof SlotDefinition)
    640         o.slots[SlotDefinitionClass.SLOT_INDEX_DOCUMENTATION] = second;
    641       else
    642         o.setInstanceSlotValue(Symbol._DOCUMENTATION, second);
     576      o.setInstanceSlotValue(Symbol._DOCUMENTATION, second);
    643577      return second;
    644578    }
  • trunk/abcl/src/org/armedbear/lisp/SlotDefinitionClass.java

    r14134 r14477  
    3838public final class SlotDefinitionClass extends StandardClass
    3939{
    40     public static final int SLOT_INDEX_NAME             = 0;
    41     public static final int SLOT_INDEX_INITFUNCTION     = 1;
    42     public static final int SLOT_INDEX_INITFORM         = 2;
    43     public static final int SLOT_INDEX_INITARGS         = 3;
    44     public static final int SLOT_INDEX_READERS          = 4;
    45     public static final int SLOT_INDEX_WRITERS          = 5;
    46     public static final int SLOT_INDEX_ALLOCATION       = 6;
    47     public static final int SLOT_INDEX_ALLOCATION_CLASS = 7;
    48     public static final int SLOT_INDEX_LOCATION         = 8;
    49     public static final int SLOT_INDEX_TYPE             = 9;
    50     public static final int SLOT_INDEX_DOCUMENTATION    = 10;
    51 
    52     /**
    53      * For internal use only. This constructor hardcodes the layout of
    54      * the class, and can't be used to create arbitrary subclasses of
    55      * slot-definition since new slots get added at the beginning.
    56      */
    5740    public SlotDefinitionClass(Symbol symbol, LispObject cpl) {
    5841        super(symbol, cpl);
    59         Package pkg = PACKAGE_SYS;
    6042        LispObject[] instanceSlotNames = {
    6143            Symbol.NAME,
     
    8062        // in its constructor; here we make Lisp-side subclasses of
    8163        // standard-*-slot-definition do the same.
    82         LispObject locationSlot = slotDefinitions.nthcdr(SLOT_INDEX_LOCATION).car();
     64        LispObject locationSlot = slotDefinitions.nthcdr(8).car();
    8365        SlotDefinition.SET_SLOT_DEFINITION_INITFORM.execute(locationSlot, NIL);
    8466        SlotDefinition.SET_SLOT_DEFINITION_INITFUNCTION.execute(locationSlot, StandardClass.constantlyNil);
     67        // Fix initargs of TYPE, DOCUMENTATION slots.
     68        LispObject typeSlot = slotDefinitions.nthcdr(9).car();
     69        SlotDefinition.SET_SLOT_DEFINITION_INITARGS.execute(typeSlot, list(internKeyword("TYPE")));
     70        LispObject documentationSlot = slotDefinitions.nthcdr(10).car();
     71        SlotDefinition.SET_SLOT_DEFINITION_INITARGS.execute(documentationSlot, list(internKeyword("DOCUMENTATION")));
    8572        setDirectSlotDefinitions(slotDefinitions);
    8673        setSlotDefinitions(slotDefinitions);
    87         // Fix initargs of TYPE, DOCUMENTATION slots.
    88         LispObject typeSlot = slotDefinitions.nthcdr(SLOT_INDEX_TYPE).car();
    89         SlotDefinition.SET_SLOT_DEFINITION_INITARGS.execute(typeSlot, list(internKeyword("TYPE")));
    90         LispObject documentationSlot = slotDefinitions.nthcdr(SLOT_INDEX_DOCUMENTATION).car();
    91         SlotDefinition.SET_SLOT_DEFINITION_INITARGS.execute(documentationSlot, list(internKeyword("DOCUMENTATION")));
    92 
    9374        setFinalized(true);
    9475    }
Note: See TracChangeset for help on using the changeset viewer.