package org.overture.codegen.vdm2cpp; import java.util.List; import org.overture.codegen.cgast.analysis.DepthFirstAnalysisAdaptor; import org.overture.codegen.cgast.declarations.AClassDeclCG; import org.overture.codegen.cgast.expressions.AIntLiteralExpCG; import org.overture.codegen.cgast.types.AExternalTypeCG; import org.overture.codegen.ir.IRInfo; import org.overture.codegen.trans.IsExpTransformation; import org.overture.codegen.trans.PrePostTransformation; import org.overture.codegen.trans.SeqConversionTransformation; import org.overture.codegen.trans.TempVarPrefixes; import org.overture.codegen.trans.TransformationVisitor; import org.overture.codegen.trans.assistants.TransAssistantCG; import org.overture.codegen.trans.conc.MainClassConcTransformation; import org.overture.codegen.trans.conc.MutexDeclTransformation; import org.overture.codegen.trans.conc.SentinelTransformation; import org.overture.codegen.trans.funcvalues.FunctionValueAssistant; import org.overture.codegen.trans.funcvalues.FunctionValueTransformation; import org.overture.codegen.trans.iterator.CppLanguageIterator; import org.overture.codegen.trans.iterator.ILanguageIterator; import org.overture.codegen.trans.letexps.FuncTransformation; import org.overture.codegen.trans.letexps.IfExpTransformation; import org.overture.codegen.trans.patterns.PatternMatchConfig; import org.overture.codegen.trans.patterns.PatternTransformation; import org.overture.codegen.trans.quantifier.Exists1CounterData; import org.overture.codegen.trans.uniontypes.UnionTypeTransformation; import org.overture.codegen.vdm2cpp.vdmtools.CallObjStmConverter; import static org.overture.codegen.ir.CodeGenBase.*; public class CppStdLibTransSeries { private CppCodeGen codeGen; public CppStdLibTransSeries(CppCodeGen codeGen) { this.codeGen = codeGen; } public DepthFirstAnalysisAdaptor[] consAnalyses(List<AClassDeclCG> classes, FunctionValueAssistant functionValueAssistant) { //IPostCheckCreator postCheckCreator = new JavaPostCheckCreator(POST_CHECK_METHOD_NAME); IRInfo irInfo = codeGen.getIRGenerator().getIRInfo(); TransAssistantCG transAssistant = codeGen.getTransAssistant(); TempVarPrefixes varPrefixes = codeGen.getTempVarPrefixes(); FuncTransformation funcTransformation = new FuncTransformation(transAssistant); PrePostTransformation prePostTransformation = new PrePostTransformation(irInfo); IfExpTransformation ifExpTransformation = new IfExpTransformation(transAssistant); FunctionValueTransformation funcValueTransformation = new FunctionValueTransformation(irInfo, transAssistant, functionValueAssistant, INTERFACE_NAME_PREFIX, TEMPLATE_TYPE_PREFIX, EVAL_METHOD_PREFIX, PARAM_NAME_PREFIX); ILanguageIterator langIterator = new CppLanguageIterator(transAssistant, irInfo.getTempVarNameGen(), varPrefixes); TransformationVisitor transVisitor = new TransformationVisitor(irInfo, classes, varPrefixes, transAssistant, consExists1CounterData(), langIterator, TERNARY_IF_EXP_NAME_PREFIX, CASES_EXP_RESULT_NAME_PREFIX, AND_EXP_NAME_PREFIX, OR_EXP_NAME_PREFIX, WHILE_COND_NAME_PREFIX, REC_MODIFIER_NAME_PREFIX); PatternTransformation patternTransformation = new PatternTransformation(classes, varPrefixes, irInfo, transAssistant, new PatternMatchConfig(),CASES_EXP_NAME_PREFIX); //PreCheckTransformation preCheckTransformation = new PreCheckTransformation(irInfo, transAssistant, new JavaValueSemanticsTag(false)); //PostCheckTransformation postCheckTransformation = new PostCheckTransformation(postCheckCreator, irInfo, transAssistant, FUNC_RESULT_NAME_PREFIX, new JavaValueSemanticsTag(false)); IsExpTransformation isExpTransformation = new IsExpTransformation(irInfo, transAssistant, IS_EXP_SUBJECT_NAME_PREFIX); SeqConversionTransformation seqConversionTransformation = new SeqConversionTransformation(transAssistant); // Concurrency related transformations SentinelTransformation concurrencytransform = new SentinelTransformation(irInfo,classes); MainClassConcTransformation mainclassTransform = new MainClassConcTransformation(irInfo, classes); MutexDeclTransformation mutexTransform = new MutexDeclTransformation(irInfo, classes); UnionTypeTransformation unionTypeTransformation = new UnionTypeTransformation(transAssistant, irInfo, classes, APPLY_EXP_NAME_PREFIX, OBJ_EXP_NAME_PREFIX, CALL_STM_OBJ_NAME_PREFIX, MISSING_OP_MEMBER, MISSING_MEMBER); //JavaClassToStringTrans javaToStringTransformation = new JavaClassToStringTrans(irInfo); DepthFirstAnalysisAdaptor[] analyses = new DepthFirstAnalysisAdaptor[] { funcTransformation, prePostTransformation, ifExpTransformation, funcValueTransformation, transVisitor, patternTransformation, //preCheckTransformation, //postCheckTransformation, isExpTransformation, unionTypeTransformation, //javaToStringTransformation, concurrencytransform, mutexTransform, mainclassTransform, seqConversionTransformation, //new ConstructorVdmLibInit(), //new MathRenamer(), new CallObjStmConverter(transAssistant, irInfo, classes) }; return analyses; } private Exists1CounterData consExists1CounterData() { AExternalTypeCG type = new AExternalTypeCG(); type.setName("long int"); IRInfo irInfo = codeGen.getIRGenerator().getIRInfo(); AIntLiteralExpCG initExp = irInfo.getExpAssistant().consIntLiteral(0); return new Exists1CounterData(type, initExp); } }