public void Scanner_GlobalDataRecursiveStructs()
{
var bytes = new byte[] {
0x17, 0x00, 0x21, 0x43, 0x00, 0x00, 0x21, 0x43,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
Given_Program(Address.Ptr32(0x43210000), bytes);
Given_Project();
var sc = new Scanner(
this.program,
new ImportResolver(project, program, eventListener),
this.sc
);
var ft = Given_Serialized_Signature(new SerializedSignature
{
ReturnValue = new Argument_v1 { Type = Real32() },
});
var str = new StructureType();
var fields = new StructureField[] {
new StructureField(0, new Pointer(ft, 4), "func"),
new StructureField(4, new Pointer(str, 4), "next"),
};
str.Fields.AddRange(fields);
sc.EnqueueUserGlobalData(Address.Ptr32(0x43210000), str);
sc.ScanImage();
var sExpSig =
@"Register real32 fn43210017()
// stackDelta: 4; fpuStackDelta: 0; fpuMaxParam: -1
";
Assert.AreEqual(1, program.Procedures.Count);
Assert.AreEqual(sExpSig, program.Procedures[Address.Ptr32(0x43210017)].Signature.ToString("fn43210017", FunctionType.EmitFlags.AllDetails));
}