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 ; }
FIXME make this method work on generic PMUltipleBinds