in Iris/FrontEndTest/SamplePrograms.cs [400:526]
public void Program05()
{
string input =
@"
program LineInfoTest;
var
i : integer;
a : array[0..9] of integer;
begin
for i := 0 to 10 do
a[i] := 0;
if i = 0 then
a[0] := 0
else if i = 1 then
a[1] := 1
else
a[2] := 1;
i := 9;
repeat
a[i] := i;
i := i - 1;
until i < 0;
end.
";
string output = TestHelpers.TestCompileProgram(input, true);
string expected = FixupBaseline(
@"
.assembly SYSTEM-ASSEMBLIES-HERE { }
.assembly extern IrisRuntime { }
.assembly LineInfoTest { }
.class public LineInfoTest
{
.field public static int32 i
.field public static int32[] a
.method public hidebysig static void $.main() cil managed
{
.entrypoint
.language '{3456107b-a1f4-4d47-8e18-7cf2c54559ae}', '{5e176682-93da-497a-a5f0-f1aee5e18cce}', '{5a869d0b-6611-11d3-bd2a-0000f80849bd}'
.line 8,8 : 1,6 'FakeFile.iris'
nop
ldc.i4.s 10
newarr int32
stsfld int32[] LineInfoTest::a
.line 9,9 : 5,24 ''
ldc.i4.0
stsfld int32 LineInfoTest::i
L0:
ldsfld int32 LineInfoTest::i
ldc.i4.s 10
bgt L1
.line 10,10 : 9,18 ''
ldsfld int32[] LineInfoTest::a
ldsfld int32 LineInfoTest::i
ldc.i4.0
stelem.i4
.line 9,9 : 5,24 ''
ldsfld int32 LineInfoTest::i
ldc.i4.1
add
stsfld int32 LineInfoTest::i
br L0
L1:
.line 12,12 : 5,18 ''
ldsfld int32 LineInfoTest::i
ldc.i4.0
bne.un L2
.line 13,13 : 9,18 ''
ldsfld int32[] LineInfoTest::a
ldc.i4.0
ldc.i4.0
stelem.i4
br L3
L2:
.line 14,14 : 5,23 ''
ldsfld int32 LineInfoTest::i
ldc.i4.1
bne.un L4
.line 15,15 : 9,18 ''
ldsfld int32[] LineInfoTest::a
ldc.i4.1
ldc.i4.1
stelem.i4
br L5
L4:
.line 16,16 : 5,9 ''
nop
.line 17,17 : 9,18 ''
ldsfld int32[] LineInfoTest::a
ldc.i4.2
ldc.i4.1
stelem.i4
.line 19,19 : 5,11 ''
L5:
L3:
ldc.i4.s 9
stsfld int32 LineInfoTest::i
L6:
.line 20,20 : 5,11 ''
nop
.line 21,21 : 9,18 ''
ldsfld int32[] LineInfoTest::a
ldsfld int32 LineInfoTest::i
dup
stelem.i4
.line 22,22 : 9,19 ''
ldsfld int32 LineInfoTest::i
ldc.i4.1
sub
stsfld int32 LineInfoTest::i
.line 23,23 : 5,10 ''
nop
ldsfld int32 LineInfoTest::i
ldc.i4.0
bge L6
.line 24,24 : 1,4 ''
nop
ret
}
}
");
Assert.AreEqual(expected, output);
}