code: private Stmt parseWhileStatement(EnclosingScope scope) {
  		int start = index;
  		match(While);
  		// NOTE: expression terminated by ':'
  		Expr condition = parseLogicalExpression(scope, true);
  		// Parse the loop invariants
  		Tuple<Expr> invariants = parseInvariant(scope,Where);
  		match(Colon);
  		int end = index;
  		matchEndLine();
  		Stmt.Block blk = parseBlock(scope, true);
  		return annotateSourceLocation(new Stmt.While(condition, invariants, new Tuple<>(), blk), start, end-1);
  	}
docs: Parse a while statement, which has the form:
  
  <pre>
  WhileStmt ::= "while" Expr ("where" Expr)* ':' NewLine Block
  </pre>
  
  @see wyc.lang.Stmt.While
  
  @param scope
  The enclosing scope for this statement, which determines the
  set of visible (i.e. declared) variables and also the current
  indentation level.
  @return
  @author David J. Pearce