sclass ParsedWithTokens extends Var {
LS tok; // full CNC token list being parsed
int iStart; // points to first parsed C token
int iRemaining; // points to first unparsed C token
*() {}
*(A a) { super(a); }
*(A a, LS *tok, int *iStart, int *iRemaining) { super(a); }
S parsedText() { ret joinSubList(iStart | 1, iRemaining & ~1)); }
ListAndIndex remaining() { ret ListAndIndex(tok, iRemaining); }
ParsedWithTokens withValue(B b) {
ret new ParsedWithTokens(b, tok, iStart, iRemaining);
}
toString {
ret "Parsed " + quote(parsedText()) + " as " + super.toString();
}
}