code: private Stmt.Case parseCaseStatement(EnclosingScope scope) {
  		int start = index;
  		List<Expr> values;
  		if (tryAndMatch(true, Default) != null) {
  			values = Collections.EMPTY_LIST;
  		} else {
  			match(Case);
  			// Now, parse one or more constant expressions
  			values = new ArrayList<>();
  			do {
  				// NOTE: expression terminated by ':'
  				values.add(parseExpression(scope, true));
  			} while (tryAndMatch(true, Comma) != null);
  		}
  		match(Colon);
  		int end = index;
  		matchEndLine();
  		Stmt.Block stmts = parseBlock(scope, scope.isInLoop());
  		return annotateSourceLocation(new Stmt.Case(new Tuple<>(values), stmts), start,end-1);
  	}
docs: Parse a case Statement, which has the form:
  
  <pre>
  CaseStmt ::= "case" NonTupleExpr (',' NonTupleExpression)* ':' NewLine Block
  </pre>
  
  @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