public int Execute(PolishProgram program) throws Exception
	{
		// execute the command.
		// returns -10 - standard running
		// returns label in goto - in case the command was goto
		// returns -1 - in case there is a runtime error

		int expressionVal = -1;
		switch (m_Type)
		{
			case Assignment:
			{
				expressionVal = m_Expression.Execute(program);
				if (expressionVal != -1)
				{
					program.AssignVar(m_VarName1, expressionVal);
					return -10;
				}
				return -1;
			}
			case Goto:
				return m_Lable;
			case Print:
			{
				expressionVal = m_Expression.Execute(program);
				if (expressionVal != -1)
				{
					program.Print(expressionVal);
					return -10;
				}
				return -1;
			}
			case BoolOpertion:
			{
				int val1 = program.GetVarValue(m_VarName1);
				if (val1 == -1)
				{
					program.AddError(PolishProgram.ErrorCodeInitalization,
					    "Not initalized var " + m_VarName1);
					return -1;
				}

				int val2 = program.GetVarValue(m_VarName2);
				if (val2 == -1)
				{
					program.AddError(PolishProgram.ErrorCodeInitalization,
					    "Not initalized var " + m_VarName2);
					return -1;
				}

				if (EveluateBoolOpearion(val1, val2, m_BoolOp))
				{
					return m_Command.Execute(program);
				}
				else
				{
					return -10;
				}
			}
			default:
				throw new Exception("Why there is some execution?");
		}
	}