internal void Set(int id, Scriptable start, object value)
{
if (value == ScriptableConstants.NOT_FOUND)
{
throw new ArgumentException();
}
EnsureId(id);
int attr = attributeArray[id - 1];
if ((attr & READONLY) == 0)
{
if (start == obj)
{
if (value == null)
{
value = UniqueTag.NULL_VALUE;
}
int valueSlot = (id - 1) * SLOT_SPAN;
lock (this)
{
valueArray[valueSlot] = value;
}
}
else
{
int nameSlot = (id - 1) * SLOT_SPAN + NAME_SLOT;
string name = (string)valueArray[nameSlot];
start.Put(name, start, value);
}
}
}