Exemplo n.º 1
0
Arquivo: Expr.cpp Projeto: scunz/pas2c
    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;
        }
    }
Exemplo n.º 2
0
Arquivo: tables.cpp Projeto: rd8/qGo
// 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;
}
Exemplo n.º 3
0
Arquivo: tables.cpp Projeto: rd8/qGo
// 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;
}
Exemplo n.º 4
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()
Exemplo n.º 5
0
Arquivo: tables.cpp Projeto: rd8/qGo
// 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++;
			}
		}
	}
}