bool Expr::parsePrimaryExpression() { PARSER_FLOW_TRACER(); switch(ahead().type()) { case T_LEFT_PAREN: { REQUIRE_TOKEN(T_LEFT_PAREN); FAIL_IF_NOT(parseExpression()); REQUIRE_TOKEN(T_RIGHT_PAREN); return true; } case T__NUMBER: { next(); setModel(new Model::ExprConstNumber(current().number())); return true; } case T__STRING: { next(); setModel(new Model::ExprConstString(QString::fromUtf8(current().text().constData()))); return true; } case T__FLOAT: next(); setModel(new Model::ExprConstDouble(current().numberFloat())); return true; case T__IDENTIFIER: { Model::Decl::Ptr decl = curCtx()->lookup(ahead().identifier()); if (!decl) { emitError(QLatin1Literal("Unknown identifier: ") % Model::Identifier(ahead().identifier()).toString()); return false; } if (decl->type() == Model::oDeclConst) { next(); Model::ExprConstConst::Ptr ecc = new Model::ExprConstConst; ecc->setDecl(decl.scast<Model::DeclConst>()); setModel(ecc); return true; } LValue lvp(this); lvp.setOptions(LValue::AllowFunctionCall); FAIL_IF_NOT(lvp()); Model::ExprLValue::Ptr elv = new Model::ExprLValue; elv->setLValue(lvp.model()); setModel(elv); return true; } default: return false; } }
// return the rank of a given name QString ClientWindow::getPlayerRk(QString player) { QListViewItemIterator lvp(ListView_players); QListViewItem *lvpi; // look for players in playerlist for (; (lvpi = lvp.current()); lvp++) { // check if names are identical if (lvpi->text(1) == player) { return lvpi->text(2); } } return 0; }
// check for exclude list entry of a given name QString ClientWindow::getPlayerExcludeListEntry(QString player) { QListViewItemIterator lvp(ListView_players); QListViewItem *lvpi; if (DODEBUG) qDebug(QString("getPlayerExcludeListEntry(%1)").arg(player)); // look for players in playerlist for (; (lvpi = lvp.current()); lvp++) { // check if names are identical if (lvpi->text(1) == player) { if (DODEBUG) qDebug(QString("text(1) = %1, player = %2").arg(lvpi->text(1)).arg(player)); return lvpi->text(6); } } return 0; }
//iomanipulator. builds an object of class "LisPrinter" that has a //special overloaded "<<" operator. inline LispVecPrinter lisp(const ASTVec &vec, int indentation = 0) { LispVecPrinter lvp(vec, indentation); return lvp; } //end of LispVecPrinter_lisp()
// take a new game from parser void ClientWindow::slot_game(Game* g) { // insert into ListView QListViewItemIterator lv(ListView_games); if (g->running) { bool found = false; GamesTableItem *lvi_mem = NULL; // check if game already exists if (!playerListEmpty) { QListViewItemIterator lvii = lv; for (GamesTableItem *lvi; (lvi = static_cast<GamesTableItem*>(lvii.current())) && !found;) { lvii++; // compare game id if (lvi->text(0) == g->nr) { found = true; lvi_mem = lvi; } } } else if (!g->H && !myAccount->num_games) { // skip games until initial table has loaded qDebug("game skipped because no init table"); return; } QString excludeMark = ""; QString myMark = "B"; // check if exclude entry is done later if (g->H) //g->status.length() > 1) { QString emw; QString emb; // no: do it now emw = getPlayerExcludeListEntry(g->wname); emb = getPlayerExcludeListEntry(g->bname); // ensure that my game is listed first if (emw && emw == "M" || emb && emb == "M") { myMark = "A"; excludeMark = "M"; // I'm playing, thus I'm open, except teaching games if (emw && emw && (emw != "M" || emb != "M")) { // checkbox open slot_checkbox(0, true); } } else if (emw && emw == "W" || emb && emb == "W") { excludeMark = "W"; } } if (found) { // supersede entry //lvi_mem->setText(0, g->nr); lvi_mem->setText(1, g->wname); lvi_mem->setText(2, g->wrank); lvi_mem->setText(3, g->bname); lvi_mem->setText(4, g->brank); lvi_mem->setText(5, g->mv); lvi_mem->setText(6, g->Sz); lvi_mem->setText(7, g->H); lvi_mem->setText(8, g->K); lvi_mem->setText(9, g->By); lvi_mem->setText(10, g->FR); lvi_mem->setText(11, g->ob); // lvi_mem->setText(6, g->status + " (" + g->ob + ")"); lvi_mem->setText(12, myMark + rkToKey(g->wrank) + g->wname.lower() + ":" + excludeMark); lvi_mem->ownRepaint(); } else { // from GAMES command or game info{...} if (g->H) { lv = new GamesTableItem(ListView_games, g->nr, " " + g->wname, g->wrank, " " + g->bname, g->brank, g->mv, g->Sz, g->H, g->K, g->By, g->FR, g->ob); } else { lv = new GamesTableItem(ListView_games, g->nr, " " + g->wname, g->wrank, " " + g->bname, g->brank, g->mv, g->Sz); } lv.current()->setText(12, myMark + rkToKey(g->wrank) + g->wname.lower() + ":" + excludeMark); static_cast<GamesTableItem*>(lv.current())->ownRepaint(); // increase number of games myAccount->num_games++; statusGames->setText(" G: " + QString::number(myAccount->num_games) + " / " + QString::number(myAccount->num_observedgames) + " "); } // update player info if this is not a 'who'-result or if it's me if (!g->H || myMark == "A") //g->status.length() < 2) { QListViewItemIterator lvp(ListView_players); QListViewItem *lvpi; int found = 0; // look for players in playerlist for (; (lvpi = lvp.current()) && found < 2;) { // check if names are identical if (lvpi->text(1) == g->wname || lvpi->text(1) == g->bname) { lvpi->setText(3, g->nr); found++; // check if players has a rank if (g->wrank == "??" || g->brank == "??") { // no rank given in case of continued game -> set rank in games table if (lvpi->text(1) == g->wname) { lv.current()->setText(2, lvpi->text(2)); // correct sorting of col 2 -> set col 12 lv.current()->setText(12, myMark + rkToKey(lvpi->text(2)) + lvpi->text(1).lower() + ":" + excludeMark); } // no else case! bplayer could be identical to wplayer! if (lvpi->text(1) == g->bname) lv.current()->setText(4, lvpi->text(2)); static_cast<GamesTableItem*>(lv.current())->ownRepaint(); } } lvp++; } ListView_games->sort(); } } else { // from game info {...} bool found = false; QString game_id; if (g->nr != "@") { for (QListViewItem *lvi; (lvi = lv.current()) && !found;) { lv++; // compare game id if (lvi->text(0) == g->nr) { lv++; delete lvi; found = true;; } } // used for player update below game_id = g->nr; } else { for (QListViewItem *lvi; (lvi = lv.current()) && !found;) { lv++; // look for name if (lvi->text(1) == myAccount->acc_name || lvi->text(3) == myAccount->acc_name) { // used for player update below game_id = lvi->text(0); lv++; delete lvi; found = true;; } } } if (!found) qWarning("game not found"); else { // decrease number of games myAccount->num_games--; statusGames->setText(" G: " + QString::number(myAccount->num_games) + " / " + QString::number(myAccount->num_observedgames) + " "); QListViewItemIterator lvp(ListView_players); QListViewItem *lvpi; int found = 0; // look for players in playerlist for (; (lvpi = lvp.current()) && found < 2;) { // check if numbers are identical if (lvpi->text(3) == game_id) { lvpi->setText(3, "-"); found++; } lvp++; } } } }