class FrameInfo
pri TopOpStack : OpStackList;
pri PC : bytecode;
pri currentClass : ClassInfo;
pri fstlocal : LocalList;
pri currentMethod : MethodInfo;
meth GetTopOpStack =^ (res f: OpStackList ·
f:= TopOpStack;
)
end
meth SetTopOpStack =^ (val f: OpStackList ·
TopOpStack:= f;
)
end
meth SetcurrentClass =^ ( val c: ClassInfo ·
currentClass:= c;
)
end
meth GetcurrentClass =^ ( res c: ClassInfo ·
c:= currentClass;
)
end
meth GetfstLocal =^ (res f: LocalList ·
f:= fstLocal;
)
end
meth SetfstLocal =^ (val f: LocalList ·
fstLocal:= f;
)
end
meth SetcurrentMethod =^ ( val m: MethodInfo ·
currentMethod:= m;
)
end
meth GetcurrentMethod =^ ( res m: MethodInfo ·
m:= currentMethod;
)
end
meth GetPC =^ (res b: Bytecode ·
b:= PC;
)
end
meth SetPC =^ (val b: Bytecode ·
PC:= b;
)
end
meth IncPC =^ ( ·
if [] PC <> null ® PC.GetNext(PC);
fi
)
end
meth Push =^ ( val D: Object ·
var NewItem: OpStackList ·
NewItem:= New OpStackList;
NewItem.SetData(D);
NewItem.SetNext(TopOpStack);
TopOpStack := NewItem;
end
)
end
meth Pop =^ ( res D: Object ·
TopOpStack.GetData(D);
TopOpStack.GetNext(TopOpStack);
)
end
meth GetLocal =^ (val count: Int;
res d: object ·
FstLocal.GetLocal(count, d);
)
end
meth PutLocal =^ (val count: Int;
val d: object ·
FstLocal.PutLocal(FstLocal, count, d);
)
end
meth AppendLocal =^ (val d: object ·
if [] FstLocal = null ®
FstLocal:= New LocalList;
FstLocal.SetData(d)
[] FstLocal <> null ®
FstLocal.AppendLocal(FstLocal, d);
fi
)
end
meth Branch =^ ( val BranchOffset: Int ·
PC.Branch(PC, BranchOffSet);
)
end
meth FindCPList =^ (val index: Int; res entry : CPList ·
currentClass.FindCPList(index, entry);
)
end
end