private void Backtrack (int cp) {
Debug.Assert (cp > mark_start, "Regex", "Attempt to backtrack forwards");
for (int i = 0; i < groups.Length; ++ i) {
int m = groups [i];
while (cp <= m)
m = marks [m].Previous;
groups [i] = m;
}
}