//Function to generate constructor call and add IdentifierExpressions from contract users. private List <BoogieCmd> GenerateConstructorCall(ContractDefinition contract) { List <BoogieCmd> localStmtList = new List <BoogieCmd>(); string callee = Conversion_Utility_Tool.GetCanonicalConstructorName(contract); //Identify third part users of the conttract. //sender refers external party call. List <BoogieExpr> constructorCallInputs = new List <BoogieExpr>(); constructorCallInputs.Add(new BoogieIdentifierExpr("this")); constructorCallInputs.Add(new BoogieIdentifierExpr("msgsender_MSG")); constructorCallInputs.Add(new BoogieIdentifierExpr("msgvalue_MSG")); if (classTranslatorContext.checkConstructorExists(contract) == true) { FunctionDefinition constructor = classTranslatorContext.retrieveConstructor(contract); foreach (VariableDeclaration param in constructor.Parameters.Parameters) { string name = Conversion_Utility_Tool.GetCanonicalLocalVariableName(param, classTranslatorContext); constructorCallInputs.Add(new BoogieIdentifierExpr(name)); if (param.TypeName is ArrayTypeName) { localStmtList.Add(new BoogieCallCmd( "FreshRefGenerator", new List <BoogieExpr>(), new List <BoogieIdentifierExpr>() { new BoogieIdentifierExpr(name) })); } } } if (Flags_HelperClass.InstrumentGas) { Conversion_Utility_Tool.havocGas(localStmtList); } localStmtList.Add(new BoogieCallCmd(callee, constructorCallInputs, null)); return(localStmtList); }