test(sepcompile): cover static property in cross-unit .bif round-trip

The cross-unit static-members tests (QBE + native) already drive a static
var, static method and static const through the warm --unit-cache .bif
boundary. Add a static property (a getter-backed 'static property Counter
read Next') to the shared test unit so TPropertyDecl.IsStatic surviving the
.bif round-trip is guarded too: a non-static import would dispatch the
getter with a bogus Self. Expected stdout updated to include the extra
Counter read.
This commit is contained in:
Graeme Geldenhuys 2026-06-29 10:08:44 +01:00
parent 8d1cdc8f61
commit 25cd8e3ee7

View file

@ -1612,6 +1612,10 @@ const
FCount: Integer;
public
static function Next: Integer;
{ Static property whose getter is a static method: exercises
TPropertyDecl.IsStatic surviving the .bif round-trip (a non-static
import would dispatch with a bogus Self). }
static property Counter: Integer read Next;
public static const
Tag = 7;
end;
@ -1630,6 +1634,7 @@ const
begin
WriteLn(TReg.Next());
WriteLn(TReg.Next());
WriteLn(TReg.Counter);
WriteLn(TReg.Tag)
end.
''';
@ -1668,7 +1673,7 @@ begin
AssertEquals('qbe build1 exit (out: ' + Captured + ')', 0, Rc);
Rc := RunBinary(ProgBin, Captured);
AssertEquals('qbe build1 run exit', 0, Rc);
AssertEquals('qbe build1 stdout', '1' + #10 + '2' + #10 + '7' + #10, Captured);
AssertEquals('qbe build1 stdout', '1' + #10 + '2' + #10 + '3' + #10 + '7' + #10, Captured);
{ Build 2 (warm cache): RegModU loaded purely from its cached .bif the
static facts must survive the .bif round-trip. }
@ -1679,7 +1684,7 @@ begin
AssertEquals('qbe build2 exit (out: ' + Captured + ')', 0, Rc);
Rc := RunBinary(ProgBin, Captured);
AssertEquals('qbe build2 run exit', 0, Rc);
AssertEquals('qbe build2 stdout', '1' + #10 + '2' + #10 + '7' + #10, Captured)
AssertEquals('qbe build2 stdout', '1' + #10 + '2' + #10 + '3' + #10 + '7' + #10, Captured)
end;
procedure TSepCompileTests.TestStaticMembers_CrossUnit_Native;
@ -1715,7 +1720,7 @@ begin
AssertEquals('native build1 exit (out: ' + Captured + ')', 0, Rc);
Rc := RunBinary(ProgBin, Captured);
AssertEquals('native build1 run exit', 0, Rc);
AssertEquals('native build1 stdout', '1' + #10 + '2' + #10 + '7' + #10, Captured);
AssertEquals('native build1 stdout', '1' + #10 + '2' + #10 + '3' + #10 + '7' + #10, Captured);
Rc := RunBlaise(['--source', ProgPas, '--output', ProgBin,
'--backend', 'native',
@ -1724,7 +1729,7 @@ begin
AssertEquals('native build2 exit (out: ' + Captured + ')', 0, Rc);
Rc := RunBinary(ProgBin, Captured);
AssertEquals('native build2 run exit', 0, Rc);
AssertEquals('native build2 stdout', '1' + #10 + '2' + #10 + '7' + #10, Captured)
AssertEquals('native build2 stdout', '1' + #10 + '2' + #10 + '3' + #10 + '7' + #10, Captured)
end;
initialization