fix(bif): resolve bif-coverage gaps for current master

- Add TIndirectFuncCallExpr encoder/decoder to uUnitInterfaceIO.pas
  (was missing entirely, causing --incremental to silently drop
  indirect call nodes)
- Bump COMPILER_ID to blaise-0.11.0-dev+bif1
- Fix version check to compare base version only (strip -SNAPSHOT
  and -dev suffixes before comparing)
- Change test to Ignore() when binary missing (module is not
  activeByDefault)
- Remove redundant <version> from tool project.xml (inherits root)
- Regenerate bif-coverage.status for current AST (68 classes,
  38 encoder/decoder cases)
This commit is contained in:
Graeme Geldenhuys 2026-06-08 00:34:12 +01:00
parent 00ca54afc4
commit 328493baf2
6 changed files with 60 additions and 35 deletions

View file

@ -24,7 +24,7 @@ unit uCompilerId;
interface
const
COMPILER_ID = 'blaise-0.9.0-dev+6c-N';
COMPILER_ID = 'blaise-0.11.0-dev+bif1';
implementation

View file

@ -689,6 +689,10 @@ begin
EncodeLpstr(TMethodCallExpr(AE).Name) +
EncodeExpr(TMethodCallExpr(AE).ObjExpr) +
EncodeExprList(TMethodCallExpr(AE).Args)
else if AE is TIndirectFuncCallExpr then
Result := EncodeLpstr('icall') +
EncodeExpr(TIndirectFuncCallExpr(AE).CalleeExpr) +
EncodeExprList(TIndirectFuncCallExpr(AE).Args)
else if AE is TFieldAccessExpr then
Result := EncodeLpstr('field') +
EncodeLpstr(TFieldAccessExpr(AE).RecordName) +
@ -1267,6 +1271,7 @@ var
BE: TBinaryExpr;
NE: TNotExpr;
FCE: TFuncCallExpr;
ICE: TIndirectFuncCallExpr;
MCE: TMethodCallExpr;
FA: TFieldAccessExpr;
DE: TDerefExpr;
@ -1336,6 +1341,13 @@ begin
ReadExprList(AText, APos, MCE.Args);
Result := MCE;
end
else if Kind = 'icall' then
begin
ICE := TIndirectFuncCallExpr.Create();
ICE.CalleeExpr := ReadExpr(AText, APos);
ReadExprList(AText, APos, ICE.Args);
Result := ICE;
end
else if Kind = 'field' then
begin
FA := TFieldAccessExpr.Create();

View file

@ -85,8 +85,10 @@ var
begin
Bin := BinaryPath();
if not FileExists(Bin) then
Fail('bif-coverage binary not built at ' + Bin +
' — build tools/bif-coverage before running TestRunner');
begin
Ignore('bif-coverage binary not built at ' + Bin);
Exit;
end;
Proc := TProcess.Create(nil);
try

View file

@ -31,14 +31,14 @@ TIdentExpr.IsVarParam safe
TIdentExpr.IsConstant safe
TIdentExpr.ConstValue safe
TIdentExpr.ConstString safe
TIdentExpr.IsNoArgFuncCall safe
TIdentExpr.IsGlobal safe
TIdentExpr.IsThreadVar safe
TIdentExpr.IsImplicitSelf safe
TIdentExpr.IsImplicitSelfMethod safe
TIdentExpr.IsMetaclassRef safe
TIdentExpr.ConstArraySymbol safe
# TFieldAccessExpr (uAST.pas:94)
# TFieldAccessExpr (uAST.pas:93)
TFieldAccessExpr.RecordName serialise
TFieldAccessExpr.FieldName serialise
TFieldAccessExpr.Base serialise
@ -61,6 +61,7 @@ TFieldAccessExpr.IsBuiltinToString safe
TFieldAccessExpr.IsVarParam safe
TFieldAccessExpr.PropIndexExpr serialise
TFieldAccessExpr.IsCharAccess safe
TFieldAccessExpr.IsArrayAccess safe
# TIsExpr (uAST.pas:125)
TIsExpr.Obj serialise
@ -89,26 +90,27 @@ TAssignment.Name serialise
TAssignment.Expr serialise
TAssignment.IsVarParam safe
TAssignment.IsGlobal safe
TAssignment.IsThreadVar safe
TAssignment.IsWeakLhs safe
TAssignment.ImplicitSelfField safe
# TIfStmt (uAST.pas:193)
# TIfStmt (uAST.pas:194)
TIfStmt.Condition serialise
TIfStmt.ThenStmt serialise
TIfStmt.ElseStmt serialise
# TCompoundStmt (uAST.pas:201)
# TCompoundStmt (uAST.pas:202)
TCompoundStmt.Stmts serialise
# TWhileStmt (uAST.pas:208)
# TWhileStmt (uAST.pas:209)
TWhileStmt.Condition serialise
TWhileStmt.Body serialise
# TRepeatStmt (uAST.pas:215)
# TRepeatStmt (uAST.pas:216)
TRepeatStmt.Body serialise
TRepeatStmt.Condition serialise
# TForStmt (uAST.pas:222)
# TForStmt (uAST.pas:223)
TForStmt.VarName serialise
TForStmt.IsGlobal safe
TForStmt.StartExpr serialise
@ -116,7 +118,7 @@ TForStmt.EndExpr serialise
TForStmt.IsDownTo serialise
TForStmt.Body serialise
# TForInStmt (uAST.pas:233)
# TForInStmt (uAST.pas:234)
TForInStmt.VarName serialise
TForInStmt.VarIsGlobal safe
TForInStmt.CollExpr serialise
@ -129,38 +131,40 @@ TForInStmt.ArrayLow safe
TForInStmt.ArrayHigh safe
TForInStmt.IsDynArrayIter safe
TForInStmt.IsStringIter safe
TForInStmt.IsCodePointIter safe
TForInStmt.AdvVarName safe
TForInStmt.IsSetIter safe
TForInStmt.SetBitCount safe
TForInStmt.SetMaskVarName safe
# TTryFinallyStmt (uAST.pas:263)
# TTryFinallyStmt (uAST.pas:267)
TTryFinallyStmt.TryBody serialise
TTryFinallyStmt.FinallyBody serialise
# TTryExceptStmt (uAST.pas:280)
# TTryExceptStmt (uAST.pas:284)
TTryExceptStmt.TryBody serialise
TTryExceptStmt.Handlers serialise
TTryExceptStmt.ElseBody serialise
TTryExceptStmt.ExceptBody serialise
# TRaiseStmt (uAST.pas:293)
# TRaiseStmt (uAST.pas:297)
TRaiseStmt.Expr serialise
# TExitStmt (uAST.pas:304)
# TExitStmt (uAST.pas:308)
TExitStmt.Value safe
TExitStmt.ResultAssign safe
# TBreakStmt (uAST.pas:312)
# TBreakStmt (uAST.pas:316)
# TContinueStmt (uAST.pas:315)
# TContinueStmt (uAST.pas:319)
# TCaseStmt (uAST.pas:326)
# TCaseStmt (uAST.pas:330)
TCaseStmt.Selector serialise
TCaseStmt.Branches serialise
TCaseStmt.ElseStmt serialise
TCaseStmt.IsStringCase safe
# TFieldAssignment (uAST.pas:337)
# TFieldAssignment (uAST.pas:341)
TFieldAssignment.RecordName serialise
TFieldAssignment.FieldName serialise
TFieldAssignment.Expr serialise
@ -173,24 +177,24 @@ TFieldAssignment.IsVarParam safe
TFieldAssignment.PropIndexExpr serialise
TFieldAssignment.PropOwnerType safe
# TStaticSubscriptAssign (uAST.pas:356)
# TStaticSubscriptAssign (uAST.pas:360)
TStaticSubscriptAssign.ArrayName serialise
TStaticSubscriptAssign.IndexExpr serialise
TStaticSubscriptAssign.ValueExpr serialise
TStaticSubscriptAssign.IsGlobal safe
# TPointerWriteStmt (uAST.pas:367)
# TPointerWriteStmt (uAST.pas:371)
TPointerWriteStmt.PtrExpr serialise
TPointerWriteStmt.ValExpr serialise
# TProcCall (uAST.pas:375)
# TProcCall (uAST.pas:379)
TProcCall.Name serialise
TProcCall.Args serialise
TProcCall.IsImplicitSelfMethod safe
TProcCall.IsIndirectCall safe
TProcCall.IndirectCallIsGlobal safe
# TFuncCallExpr (uAST.pas:388)
# TFuncCallExpr (uAST.pas:392)
TFuncCallExpr.Name serialise
TFuncCallExpr.Args serialise
TFuncCallExpr.IsImplicitSelfMethod safe
@ -200,18 +204,18 @@ TFuncCallExpr.IsBuiltinHasClassAttr safe
TFuncCallExpr.HasClassAttrClass safe
TFuncCallExpr.HasClassAttrAttr safe
# TIndirectFuncCallExpr (uAST.pas:414)
TIndirectFuncCallExpr.CalleeExpr safe
TIndirectFuncCallExpr.Args safe
# TIndirectFuncCallExpr (uAST.pas:418)
TIndirectFuncCallExpr.CalleeExpr serialise
TIndirectFuncCallExpr.Args serialise
# TDerefExpr (uAST.pas:424)
# TDerefExpr (uAST.pas:428)
TDerefExpr.Expr serialise
# TAddrOfExpr (uAST.pas:431)
# TAddrOfExpr (uAST.pas:435)
TAddrOfExpr.Expr serialise
TAddrOfExpr.ResolvedFreeRoutine safe
# TMethodCallStmt (uAST.pas:443)
# TMethodCallStmt (uAST.pas:447)
TMethodCallStmt.ObjectName serialise
TMethodCallStmt.Name serialise
TMethodCallStmt.Args serialise
@ -222,11 +226,11 @@ TMethodCallStmt.IsVarParam safe
TMethodCallStmt.IsBuiltinToString safe
TMethodCallStmt.IsProcFieldCall safe
# TInheritedCallStmt (uAST.pas:470)
# TInheritedCallStmt (uAST.pas:474)
TInheritedCallStmt.Name serialise
TInheritedCallStmt.Args serialise
# TMethodCallExpr (uAST.pas:659)
# TMethodCallExpr (uAST.pas:664)
TMethodCallExpr.ObjectName serialise
TMethodCallExpr.Name serialise
TMethodCallExpr.Args serialise
@ -236,4 +240,5 @@ TMethodCallExpr.IsGlobal safe
TMethodCallExpr.IsVarParam safe
TMethodCallExpr.IsBuiltinToString safe
TMethodCallExpr.IsBuiltinInheritsFrom safe
TMethodCallExpr.IsProcFieldCall safe

View file

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project>
<name>blaise-bif-coverage</name>
<version>0.10.0-SNAPSHOT</version>
<build>
<packaging>application</packaging>

View file

@ -798,7 +798,8 @@ end;
procedure CheckVersion();
var
ProjVer, CompId, Tail: string;
ProjVer, CompId, Tail, BaseVer: string;
DashPos: Integer;
begin
ProjVer := ReadProjectVersion();
CompId := ReadCompilerId();
@ -820,9 +821,15 @@ begin
end;
Tail := Copy(CompId, Length(COMPILER_ID_PREFIX),
Length(CompId) - Length(COMPILER_ID_PREFIX));
if Pos(ProjVer, Tail) <> 0 then
{ Strip -SNAPSHOT or -dev suffix from project version for comparison.
Convention: project.xml uses X.Y.Z-SNAPSHOT, COMPILER_ID uses X.Y.Z-dev+suffix. }
BaseVer := ProjVer;
DashPos := Pos('-', BaseVer);
if DashPos >= 0 then
BaseVer := Copy(BaseVer, 0, DashPos);
if Pos(BaseVer, Tail) <> 0 then
Report(' [version] COMPILER_ID ' + CompId +
' does not start with project version ' + ProjVer +
' does not contain base version ' + BaseVer +
' (after ' + COMPILER_ID_PREFIX + ' prefix)');
end;