public int PushKS (int errline, int errcol) {
// new KeySequence each time
KeySequence ks = new KeySequence(cs.TableDim, errline, errcol);
// needs to clear KSStruct before using
KSStruct kss;
if (KSpointer < KSs.Count) {
// reuse, clear up KSs.KSpointer
kss = (KSStruct) KSs[KSpointer];
kss.ks = ks;
// reactivate LocatedActiveAxis
for (int i = 0; i < cs.TableDim; i ++) {
kss.fields[i].Reactivate(ks); // reassociate key sequence
}
}
else { // "==", new
kss = new KSStruct(ks, cs.TableDim);
for (int i = 0; i < cs.TableDim; i ++) {
kss.fields[i] = new LocatedActiveAxis (cs.constraint.Fields[i], ks, i);
cs.axisFields.Add (kss.fields[i]); // new, add to axisFields
}
KSs.Add(kss);
}
kss.depth = this.CurrentDepth - 1;
return (KSpointer ++);
}