package org.overture.codegen.trans.iterator; import java.util.List; import org.overture.codegen.cgast.SExpCG; import org.overture.codegen.cgast.SPatternCG; import org.overture.codegen.cgast.SStmCG; import org.overture.codegen.cgast.STypeCG; import org.overture.codegen.cgast.analysis.AnalysisException; import org.overture.codegen.cgast.declarations.AVarDeclCG; import org.overture.codegen.cgast.expressions.ACastUnaryExpCG; import org.overture.codegen.cgast.expressions.ADeRefExpCG; import org.overture.codegen.cgast.expressions.AIdentifierVarExpCG; import org.overture.codegen.cgast.expressions.ANotEqualsBinaryExpCG; import org.overture.codegen.cgast.expressions.APostIncExpCG; import org.overture.codegen.cgast.expressions.APreIncExpCG; import org.overture.codegen.cgast.patterns.AIdentifierPatternCG; import org.overture.codegen.cgast.statements.ALocalPatternAssignmentStmCG; import org.overture.codegen.cgast.types.ABoolBasicTypeCG; import org.overture.codegen.ir.ITempVarGen; import org.overture.codegen.trans.TempVarPrefixes; import org.overture.codegen.trans.assistants.TransAssistantCG; public class CppLanguageIterator extends JavaLanguageIterator{ protected String iteratorName; public CppLanguageIterator( TransAssistantCG transformationAssistant, ITempVarGen tempGen, TempVarPrefixes varPrefixes) { super(transformationAssistant, tempGen, varPrefixes); } // @Override // public List<SStmCG> getPreForLoopStms(...) // { // List<SStmCG> stms = new LinkedList<SStmCG>(); // // super.getPreForLoopStms() // // stms.add(super.getPreForLoopStms()) // } @Override public AVarDeclCG getForLoopInit(AIdentifierVarExpCG setVar, List<SPatternCG> patterns, SPatternCG pattern) { // TODO Auto-generated method stub iteratorName = tempGen.nextVarName(varPrefixes.getIteratorNamePrefix()); AVarDeclCG iterator = new AVarDeclCG(); AIdentifierPatternCG idPattern = new AIdentifierPatternCG(); idPattern.setName(iteratorName); iterator.setPattern(idPattern); iterator.setType(setVar.getType().clone()); //iterator.setExp(transformationAssistant.consInstanceCall(setVar.getType().clone(), // setVar.getOriginal(), iteratorType.clone(), config.iteratorMethod(), // null)); iterator.setExp(transAssistant.consInstanceCall(setVar.getType().clone(), setVar.getName(), setVar.getType().clone(), "begin", null)); return iterator; } @Override public SExpCG getForLoopCond(AIdentifierVarExpCG setVar, List<SPatternCG> patterns, SPatternCG pattern) throws AnalysisException { ANotEqualsBinaryExpCG i_end_comp; i_end_comp = new ANotEqualsBinaryExpCG(); // AVariableExpCG instance = new AVariableExpCG(); AIdentifierVarExpCG instance = new AIdentifierVarExpCG(); instance.setName(iteratorName); instance.setType(setVar.getType().clone()); i_end_comp.setLeft(instance); i_end_comp.setRight(transAssistant.consInstanceCall( setVar.getType().clone(), setVar.getName(), new ABoolBasicTypeCG(), "end", null)); return i_end_comp; } @Override public SExpCG getForLoopInc(AIdentifierVarExpCG setVar, List<SPatternCG> patterns, SPatternCG pattern) { // TODO Auto-generated method stub AIdentifierVarExpCG var = new AIdentifierVarExpCG(); var.setName(iteratorName); var.setType(setVar.getType().clone()); APreIncExpCG inc_exp = new APreIncExpCG(); inc_exp.setType(setVar.getType().clone()); inc_exp.setExp(var); return inc_exp; } @Override public AVarDeclCG getNextElementDeclared(AIdentifierVarExpCG setVar, List<SPatternCG> patterns, SPatternCG pattern) throws AnalysisException { // TODO Auto-generated method stub AVarDeclCG cast = new AVarDeclCG(); ADeRefExpCG deref_and_inc = new ADeRefExpCG(); deref_and_inc.setType(setVar.getType().clone()); AIdentifierVarExpCG var = new AIdentifierVarExpCG(); var.setName(iteratorName); var.setType(setVar.getType().clone()); APostIncExpCG inc_exp = new APostIncExpCG(); inc_exp.setType(setVar.getType().clone()); inc_exp.setExp(var); deref_and_inc.setExp(var); ACastUnaryExpCG cast_to_value = new ACastUnaryExpCG(); cast_to_value.setExp(deref_and_inc); STypeCG elementType = transAssistant.getSetTypeCloned(setVar).getSetOf(); cast_to_value.setType(elementType); cast.setPattern(pattern); cast.setType(transAssistant.getSetTypeCloned(setVar).getSetOf()); cast.setExp(deref_and_inc); return cast; } // @Override public ALocalPatternAssignmentStmCG getNextElementAssigned( AIdentifierVarExpCG setVar, List<SPatternCG> patterns, SPatternCG pattern, AVarDeclCG successVarDecl, AVarDeclCG nextElementDecl) throws AnalysisException { // TODO Auto-generated method stub return null; } }