if (token == ')') { valueVar = new VarExpr(_function.createVar(name)); } else
if (token != ')')
  private Statement parseForeach()    throws IOException  {    boolean oldTop = _isTop;    _isTop = false;    try {      Location location = getLocation();      expect('(');      Expr objExpr = parseTopExpr();      expect(AS);      boolean isRef = false;      int token = parseToken();      if (token == '&') {	isRef = true;	token = parseToken();      }      if (token != '$')	throw error(L.l("expected variable in foreach"));      String name = parseIdentifier();      VarExpr keyVar = null;      VarExpr valueVar;      token = parseToken();      if (token == ARRAY_RIGHT) {	if (isRef)	  throw error(L.l("key reference is forbidden in foreach"));		keyVar = new VarExpr(_function.createVar(name));	token = parseToken();	if (token == '&') {	  isRef = true;	  token = parseToken();	}	if (token != '$')	  throw error(L.l("expected variable in foreach"));	name = parseIdentifier();	token = parseToken();      }      if (token == ')') {	valueVar = new VarExpr(_function.createVar(name));      }      else	throw error(L.l("expected ')' in foreach"));          Statement block;      token = parseToken();      if (token == ':') {	block = BlockStatement.create(getLocation(), parseStatementList());	expect(ENDFOREACH);      }      else {	_peekToken = token;	block = parseStatement();      }      return new ForeachStatement(location, objExpr, keyVar, valueVar, isRef, block);    } finally {      _isTop = oldTop;    }  }