//Create a contract boogie harness for each respective contract parsed through here. private void createContractBoogieHarness(ContractDefinition contract) { //create the contract harness name string contractHarnessName = "BoogieEntry_" + contract.Name; //input boogie variables List <BoogieVariable> inputParameters = new List <BoogieVariable>(); //output boogie variables List <BoogieVariable> outputParameters = new List <BoogieVariable>(); //Generate the harness procedure declaration. BoogieProcedure harnessProcedureDeclaration = new BoogieProcedure(contractHarnessName, inputParameters, outputParameters); classTranslatorContext.getProgram.AddBoogieDeclaration(harnessProcedureDeclaration); List <BoogieVariable> localVariables = Conversion_Utility_Tool.CollectLocalVars(new List <ContractDefinition>() { contract }, classTranslatorContext); BoogieStmtList harnessBody = new BoogieStmtList(); //add dynamic type assumptions to harness body and generate constructor call fallback. harnessBody.AddStatement(BuildDynamicTypeAssumptions(contract)); GenerateConstructorCall(contract).ForEach(x => harnessBody.AddStatement(x)); //create a boogie implementation type that represents a harness with the above parameters BoogieImplementation harnessImpl = new BoogieImplementation(contractHarnessName, inputParameters, outputParameters, localVariables, harnessBody); //add the implementation as a declaration to the Boogie Program classTranslatorContext.getProgram.AddBoogieDeclaration(harnessImpl); }