in Iris/FrontEndTest/SamplePrograms.cs [529:601]
public void Program06()
{
string input =
@"
program ByRefTest;
var
i : integer;
s : string;
procedure ByRefProc(var i : integer; var s : string);
begin
for i := 0 to 10 do
s := str(i);
i := 20;
end
begin
ByRefProc(i, s);
end.
";
string output = TestHelpers.TestCompileProgram(input);
string expected = FixupBaseline(
@"
.assembly SYSTEM-ASSEMBLIES-HERE { }
.assembly extern IrisRuntime { }
.assembly ByRefTest { }
.class public ByRefTest
{
.field public static int32 i
.field public static string s
.method public hidebysig static void ByRefProc(int32& i, string& s) cil managed
{
ldarg.0
ldc.i4.0
stind.i4
L0:
ldarg.0
ldind.i4
ldc.i4.s 10
bgt L1
ldarg.1
ldarg.0
call instance string [CoreLib]System.Int32::ToString()
stind.ref
ldarg.0
dup
ldind.i4
ldc.i4.1
add
stind.i4
br L0
L1:
ldarg.0
ldc.i4.s 20
stind.i4
ret
}
.method public hidebysig static void $.main() cil managed
{
.entrypoint
ldsfld string [CoreLib]System.String::Empty
stsfld string ByRefTest::s
ldsflda int32 ByRefTest::i
ldsflda string ByRefTest::s
call void ByRefTest::ByRefProc(int32&,string&)
ret
}
}
");
Assert.AreEqual(expected, output);
}