From 8b6f7e0f6334f97c1af85fb64767fca89c55be0d Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Mon, 12 May 2025 06:01:42 +0200 Subject: [PATCH] fix #146 - linenum not detected in message produced by ld.gold --- src/u_messages.pas | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/u_messages.pas b/src/u_messages.pas index cb50cd5e..076ac6e0 100644 --- a/src/u_messages.pas +++ b/src/u_messages.pas @@ -161,7 +161,7 @@ type function optionedOptionsModified: boolean; // function openFileFromDmdMessage(const aMessage: string): boolean; - function getLineFromMessage(const aMessage: string): TPoint; + class function getLineFromMessage(const aMessage: string): TPoint; function guessMessageKind(const aMessg: string): TAppMessageKind; // function singleServiceName: string; @@ -1239,7 +1239,7 @@ begin end; end; -function TMessagesWidget.getLineFromMessage(const aMessage: string): TPoint; +class function TMessagesWidget.getLineFromMessage(const aMessage: string): TPoint; var rng: TStringRange = (ptr:nil; pos:0; len: 0); lne: string; @@ -1258,9 +1258,10 @@ begin gnuStyle := (rng.front = ':') and (not rng.empty) and (rng.popFront^.front in ['1'..'9']); if gnuStyle then begin - lne := rng.takeUntil([':', ' ']).yield; + lne := rng.takeWhile(['1'..'9']).yield; + rng.popWhile(' '); if rng.front = ':' then - col := rng.popWhile(':')^.takeUntil(' ').yield; + col := rng.popFront()^.takeUntil([' ', ':']).yield; end else begin rng.popWhile(['(', ':']); @@ -1350,4 +1351,12 @@ begin end; {$ENDREGION} +{$IFDEF DEBUG} +begin + assert(TMessagesWidget.getLineFromMessage('home/xxx/temp/temp.sx:8 : erreur : référence à « BAD » non définie') = Point(-1,8)); + assert(TMessagesWidget.getLineFromMessage('home/xxx/temp/temp.sx:8: erreur : référence à « BAD » non définie') = Point(-1,8)); + assert(TMessagesWidget.getLineFromMessage('home/xxx/temp/temp.sx:8:12: erreur : référence à « BAD » non définie') = Point(12,8)); + assert(TMessagesWidget.getLineFromMessage('home/xxx/temp/temp.sx(8,12): erreur : référence à « BAD » non définie') = Point(12,8)); + assert(TMessagesWidget.getLineFromMessage('home/xxx/temp/temp.sx(8): erreur : référence à « BAD » non définie') = Point(-1,8)); +{$ENDIF} end.