Przeglądaj źródła

fcl-passrc: resolver: hint for text after final end.

git-svn-id: trunk@39329 -
Mattias Gaertner 7 lat temu
rodzic
commit
f0edd93e62

+ 2 - 1
packages/fcl-passrc/src/pasresolveeval.pas

@@ -128,7 +128,7 @@ const
   nTypeIdentifierExpected = 3055;
   nCannotNestAnonymousX = 3056;
   nFoundCallCandidateX = 3057;
-  // free 3058
+  nTextAfterFinalIgnored = 3058;
   // free 3059
   // free 3060
   // free 3061
@@ -245,6 +245,7 @@ resourcestring
   sTypeIdentifierExpected = 'Type identifier expected';
   sCannotNestAnonymousX = 'Cannot nest anonymous %s';
   sFoundCallCandidateX = 'Found call candidate %s';
+  sTextAfterFinalIgnored = 'Text after final ''end.''. ignored by compiler';
   sSymbolXIsNotPortable = 'Symbol "%s" is not portable';
   sSymbolXIsExperimental = 'Symbol "%s" is experimental';
   sSymbolXIsNotImplemented = 'Symbol "%s" is not implemented';

+ 8 - 0
packages/fcl-passrc/src/pasresolver.pp

@@ -4392,6 +4392,14 @@ begin
   PopScope;
 
   FStep:=prsFinishedModule;
+
+  if (CurrentParser<>nil) and (CurrentParser.Scanner<>nil) then
+    begin
+    CurrentParser.NextToken;
+    if CurrentParser.Scanner.CurToken<>tkEOF then
+      LogMsg(20180628131456,mtHint,nTextAfterFinalIgnored,sTextAfterFinalIgnored,
+        [],nil);
+    end;
   {$IFDEF VerbosePasResolver}
   writeln('TPasResolver.FinishModule END ',CurModule.Name);
   {$ENDIF}

+ 1 - 12
packages/fcl-passrc/src/pscanner.pp

@@ -735,7 +735,7 @@ type
     constructor Create(AFileResolver: TBaseFileResolver);
     destructor Destroy; override;
     procedure OpenFile(AFilename: string);
-    procedure FinishedModule; virtual;
+    procedure FinishedModule; virtual; // called by parser after end.
     function FormatPath(const aFilename: string): string; virtual;
     Procedure SetNonToken(aToken : TToken);
     Procedure UnsetNonToken(aToken : TToken);
@@ -2863,17 +2863,6 @@ begin
       DoLog(mtWarning,nIllegalStateForWarnDirective,SIllegalStateForWarnDirective,[Identifier]);
       exit;
       end;
-    end
-  else if (Identifier[1] in ['w','W']) and (msDelphi in CurrentModeSwitches) then
-    begin
-    // delphi W number
-    Number:=StrToIntDef(copy(Identifier,2,10),-1);
-    if Number<0 then
-      begin
-      DoLog(mtWarning,nIllegalStateForWarnDirective,SIllegalStateForWarnDirective,[Identifier]);
-      exit;
-      end;
-    Number:=-1;
     end;
 
   if Number>=0 then

+ 12 - 0
packages/fcl-passrc/tests/tcresolver.pas

@@ -804,6 +804,7 @@ type
     Procedure TestHint_ElementHintsMsg;
     Procedure TestHint_ElementHintsAlias;
     Procedure TestHint_ElementHints_WarnOff_SymbolDeprecated;
+    Procedure TestHint_Garbage;
 
     // attributes
     Procedure TestAttributes_Ignore;
@@ -14255,6 +14256,17 @@ begin
   CheckResolverUnexpectedHints(true);
 end;
 
+procedure TTestResolver.TestHint_Garbage;
+begin
+  StartProgram(false);
+  Add([
+  'begin',
+  'end.']);
+  ParseProgram;
+  CheckResolverHint(mtHint,nTextAfterFinalIgnored,sTextAfterFinalIgnored);
+  CheckResolverUnexpectedHints(true);
+end;
+
 procedure TTestResolver.TestAttributes_Ignore;
 begin
   StartProgram(false);