private void GenerateFunctions() { context.Program.AddDeclaration(GenerateConstToRefFunction()); context.Program.AddDeclaration(GenerateRefToInt()); context.Program.AddDeclaration(GenerateModFunction()); context.Program.AddDeclaration(GenerateKeccakFunction()); context.Program.AddDeclaration(GenerateAbiEncodedFunctionOneArg()); context.Program.AddDeclaration(GenerateVeriSolSumFunction()); context.Program.AddDeclaration(GenerateAbiEncodedFunctionTwoArgs()); context.Program.AddDeclaration(GenerateAbiEncodedFunctionOneArgRef()); context.Program.AddDeclaration(GenerateAbiEncodedFunctionTwoArgsOneRef()); if (context.TranslateFlags.QuantFreeAllocs) { if (context.TranslateFlags.UseMultiDim) { foreach (VariableDeclaration decl in context.Analysis.Alias.getResults()) { TypeName type = decl.TypeName; if (type is Mapping || type is ArrayTypeName) { BoogieFunction initFn = MapArrayHelper.GenerateMultiDimZeroFunction(decl); if (!context.initFns.Contains(initFn.Name)) { context.Program.AddDeclaration(initFn); context.initFns.Add(initFn.Name); } } } } else { context.Program.AddDeclaration(GenerateZeroRefIntArrayFunction()); context.Program.AddDeclaration(GenerateZeroIntIntArrayFunction()); context.Program.AddDeclaration(GenerateZeroRefBoolArrayFunction()); context.Program.AddDeclaration(GenerateZeroIntBoolArrayFunction()); context.Program.AddDeclaration(GenerateZeroRefRefArrayFunction()); context.Program.AddDeclaration(GenerateZeroIntRefArrayFunction()); } } if (context.TranslateFlags.NoNonlinearArith) { context.Program.AddDeclaration(generateNonlinearMulFunction()); context.Program.AddDeclaration(generateNonlinearDivFunction()); context.Program.AddDeclaration(generateNonlinearPowFunction()); context.Program.AddDeclaration(generateNonlinearModFunction()); } }
private void GenerateSingleMemoryVariable(VariableDeclaration decl, BoogieType keyType, BoogieType valType, HashSet <String> generatedMaps) { BoogieMapType map = new BoogieMapType(keyType, valType); map = new BoogieMapType(BoogieType.Ref, map); string name = mapHelper.GetMemoryMapName(decl, keyType, valType); if (!generatedMaps.Contains(name)) { BoogieFunction initFn = MapArrayHelper.GenerateMultiDimZeroFunction(keyType, valType); if (!context.initFns.Contains(initFn.Name)) { context.initFns.Add(initFn.Name); context.Program.AddDeclaration(initFn); } generatedMaps.Add(name); context.Program.AddDeclaration(new BoogieGlobalVariable(new BoogieTypedIdent(name, map))); } }