code: public ABlockStmIR consComplexCompIterationBlock(
  			List<SMultipleBindIR> multipleSetBinds, ITempVarGen tempGen,
  			IIterationStrategy strategy, IterationVarPrefixes iteVarPrefixes)
  			throws AnalysisException
  	{
  		ABlockStmIR outerBlock = new ABlockStmIR();
  
  		ABlockStmIR nextMultiBindBlock = outerBlock;
  
  		for (SMultipleBindIR bind : multipleSetBinds)
  		{
  			if (hasEmptySet(bind))
  			{
  				multipleSetBinds.clear();
  				return outerBlock;
  			}
  		}
  
  		strategy.setFirstBind(true);
  
  		for (int i = 0; i < multipleSetBinds.size(); i++)
  		{
  			strategy.setLastBind(i == multipleSetBinds.size() - 1);
  
  			SMultipleBindIR mb = multipleSetBinds.get(i);
  
  			if (mb instanceof ASetMultipleBindIR)
  			{
  				nextMultiBindBlock = consIterationBlock(nextMultiBindBlock, mb.getPatterns(), ((ASetMultipleBindIR) mb).getSet(), tempGen, strategy, iteVarPrefixes);
  			} else if (mb instanceof ASeqMultipleBindIR)
  			{
  				nextMultiBindBlock = consIterationBlock(nextMultiBindBlock, mb.getPatterns(), ((ASeqMultipleBindIR) mb).getSeq(), tempGen, strategy, iteVarPrefixes);
  			} else
  			{
  				log.error("Expected set multiple bind or sequence multiple bind. Got: "
  						+ mb);
  			}
  
  			strategy.setFirstBind(false);
  		}
  
  		return outerBlock;
  	}
docs: FIXME make this method work on generic PMUltipleBinds