@Override
	public Block.ExitStatus evaluate(IdentifierMap values)
	{
		Value evalIter = iterable.evaluate(values);
		if (!(evalIter  instanceof ListValue))	// this will probably be changed
			throw new InvalidArgumentException(evalIter + " does not evaluate to a list value"); // is this a good exception?
		ListValue asList = (ListValue) evalIter;
		boolean normalTermination = true;
		for (int i = 0; i < ((IntValue) asList.dereference("size")).getValue(); i++)
		{
			variable.setValue(asList.get(IntValue.fromInt(i)), values);
			Block.ExitStatus status = block.evaluate(values);
			if (status == Block.ExitStatus.BREAK)
			{
				normalTermination = false;
				break;
			}
			if (status == Block.ExitStatus.RETURN)
			{
				setReturnValue(block.getReturnValue());
				return Block.ExitStatus.RETURN;
			}
		}
		if (normalTermination && thenBlock != null)
		{
			Block.ExitStatus status = thenBlock.evaluate(values);
			if (status == Block.ExitStatus.RETURN)
				setReturnValue(thenBlock.getReturnValue());
			return status;
		}
		return Block.ExitStatus.NORMAL;
	}