class ObjectInfo

pri cl : ClassInfo;

pri fstField : ObjFieldList;

% Set and Get Methods

meth GetCl =^ (res c: ClassInfo ·

c:= cl;

)

end

meth SetCl =^ (val c: ClassInfo ·

cl:= c;

)

end

meth GetfstField =^ (res f: ObjFieldList ·

f:= fstField;

)

end

meth SetfstField =^ (val f: ObjFieldList ·

fstField := f;

)

end

 

meth InsertField =^ ( val cl: ClassInfo ·

Var fd : FieldList ·

Var name : String ·

cl.GetName(name);

if [] name <> "object" ®

cl.GetfstField(Fd);

self.InsertNewField (fd);

cl.GetSuper(cl);

self.InsertField(cl);

fi

end end

)

end

% Inserting a new field in the object

meth InsertNewField =^ ( val Fd: FieldList ·

Var name : String ·

Var field : FieldInfo ·

Var descriptor : String ·

Var visibility : String ·

var Item : ObjFieldInfo ·

var NewItem : ObjFieldList ·

if [] Fd <> null ®

Fd.GetField(field);

Item:= new ObjFieldInfo;

Field.GetName(name);

Item.Setname(name);

Field.GetVisibility(visibility);

Item.SetVisibility(visibility);

Field.GetDescriptor(Descriptor);

Item.BuildDataField(Descriptor);

NewItem:= new ObjFieldList;

NewItem.SetField(Item);

NewItem.SetNext(fstField);

FstField:= NewItem;

% Inserting next field

Fd.Getnext(Fd);

self.InsertNewField (fd);

Fi

end end end end end end

)

end

% Getting a data field from the object

meth GetDataFd =^ ( val N: String; res D: Object ·

FstField.GetDataFd(N, D);

)

end

 

% Uppdating a data field in the object

meth PutDataFd =^ ( val N: String; val D: Object ·

FstField.PutDataFd(FstField, N, D);

)

end

end