ForIterator.ceylon

import ceylon.ast.core {
    Expression,
    ForIterator,
    Pattern
}
import ceylon.ast.redhat {
    RedHatTransformer,
    forIteratorToCeylon,
    compileForIterator
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JForIterator=ForIterator
    }
}

shared object forIterator satisfies ConcreteTest<ForIterator,JForIterator> {
    
    String->ForIterator construct(String->Pattern pattern, String->Expression iterated)
            => "(``pattern.key`` in ``iterated.key``)"->ForIterator(pattern.item, iterated.item);
    
    shared String->ForIterator variableIterator = construct(variablePattern.stringLineVariablePattern, baseExpression.textExpression);
    shared String->ForIterator entryDestructureIterator = construct(entryPattern.eToStringLineEntryPattern, baseExpression.peopleByNameExpression);
    shared String->ForIterator tupleDestructureIterator = construct(tuplePattern.firstRestTuplePattern, qualifiedExpression.processArgumentsExpression);
    
    compile = compileForIterator;
    fromCeylon = RedHatTransformer.transformForIterator;
    toCeylon = forIteratorToCeylon;
    codes = [variableIterator, entryDestructureIterator, tupleDestructureIterator];
}