code: private Token tryAndMatchAtIndent(boolean terminated, Indent indent, Token.Kind... kinds) {
  		int start = index;
  		Indent r = getIndent();
  		if (r != null && r.equivalent(indent)) {
  			Token t = tryAndMatch(terminated, kinds);
  			if (t != null) {
  				return r;
  			}
  		}
  		// backtrack in all failing cases.
  		index = start;
  		return null;
  	}
docs: Attempt to match a given token(s) at a given level of indent, whilst
  ignoring any whitespace in between. Note that, in the case it fails to
  match, then the index will be unchanged. This latter point is important,
  otherwise we could accidentally gobble up some important indentation. If
  more than one kind is provided then this will try to match any of them.
  
  @param terminated
  Indicates whether or not this function should be concerned
  with new lines. The terminated flag indicates whether or not
  the current construct being parsed is known to be terminated.
  If so, then we don't need to worry about newlines and can
  greedily consume them (i.e. since we'll eventually run into
  the terminating symbol).
  @param indent
  The indentation level to try and match the tokens at.
  @param kinds
  
  @return