public ProjectFile_v3 VisitProgram(string projectAbsPath, Program program)
{
return new DecompilerInput_v4
{
Filename = ConvertToProjectRelativePath(projectAbsPath, program.Filename),
User = new UserData_v4
{
Procedures = program.User.Procedures
.Select(de => { de.Value.Address = de.Key.ToString(); return de.Value; })
.ToList(),
Processor = SerializeProcessorOptions(program.User, program.Architecture),
PlatformOptions = SerializePlatformOptions(program.User, program.Platform),
LoadAddress = program.User.LoadAddress != null ? program.User.LoadAddress.ToString() : null,
Calls = program.User.Calls
.Select(uc => SerializeUserCall(program, uc.Value))
.Where(uc => uc != null)
.ToList(),
IndirectJumps = program.User.IndirectJumps.Select(SerializeIndirectJump).ToList(),
JumpTables = program.User.JumpTables.Select(SerializeJumpTable).ToList(),
GlobalData = program.User.Globals
.Select(de => new GlobalDataItem_v2
{
Address = de.Key.ToString(),
DataType = de.Value.DataType,
Name = GlobalName(de),
})
.ToList(),
OnLoadedScript = program.User.OnLoadedScript,
Heuristics = program.User.Heuristics
.Select(h => new Heuristic_v3 { Name = h }).ToList(),
Annotations = program.User.Annotations.Select(SerializeAnnotation).ToList(),
TextEncoding = program.User.TextEncoding != Encoding.ASCII ? program.User.TextEncoding.WebName : null,
RegisterValues = SerializeRegisterValues(program.User.RegisterValues)
},
DisassemblyFilename = ConvertToProjectRelativePath(projectAbsPath, program.DisassemblyFilename),
IntermediateFilename = ConvertToProjectRelativePath(projectAbsPath, program.IntermediateFilename),
OutputFilename = ConvertToProjectRelativePath(projectAbsPath, program.OutputFilename),
TypesFilename = ConvertToProjectRelativePath(projectAbsPath, program.TypesFilename),
GlobalsFilename = ConvertToProjectRelativePath(projectAbsPath, program.GlobalsFilename),
};
}