internal REProgState stateStackTop; /* state of op that backtracked */

        #endregion Fields

        #region Constructors

        internal REBackTrackData(REGlobalData gData, int op, int pc)
        {
            previous = gData.backTrackStackTop;
            continuation_op = op;
            continuation_pc = pc;
            lastParen = gData.lastParen;
            if (gData.parens != null) {
                parens = new long [gData.parens.Length];
                gData.parens.CopyTo (parens, 0);
            }
            cp = gData.cp;
            stateStackTop = gData.stateStackTop;
        }
        internal REProgState previous; // previous state in stack

        #endregion Fields

        #region Constructors

        internal REProgState(REProgState previous, int min, int max, int index, REBackTrackData backTrack, int continuation_pc, int continuation_op)
        {
            this.previous = previous;
            this.min = min;
            this.max = max;
            this.index = index;
            this.continuation_op = continuation_op;
            this.continuation_pc = continuation_pc;
            this.backTrack = backTrack;
        }
 private static void pushProgState(REGlobalData gData, int min, int max, REBackTrackData backTrackLastToSave, int continuation_pc, int continuation_op)
 {
     gData.stateStackTop = new REProgState (gData.stateStackTop, min, max, gData.cp, backTrackLastToSave, continuation_pc, continuation_op);
 }