From 663ac37c1cc06c1602ed1010e71bc244030e9836 Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Sun, 10 Feb 2019 09:59:04 +0000 Subject: [PATCH] fcl-passrc: parser: dot after true,false,char,string git-svn-id: trunk@41275 - --- packages/fcl-passrc/src/pparser.pp | 5 ++- packages/fcl-passrc/tests/tcresolver.pas | 50 ++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp index 4d68683f37..8ba5953999 100644 --- a/packages/fcl-passrc/src/pparser.pp +++ b/packages/fcl-passrc/src/pparser.pp @@ -5955,7 +5955,10 @@ begin end; tkEOF: CheckToken(tkend); - tkAt,tkAtAt,tkBraceOpen,tkIdentifier,tkNumber,tkSquaredBraceOpen,tkMinus,tkPlus,tkinherited: + tkAt,tkAtAt, + tkIdentifier,tkNumber,tkString,tkfalse,tktrue,tkChar, + tkBraceOpen,tkSquaredBraceOpen, + tkMinus,tkPlus,tkinherited: begin // Do not check this here: // if (CurToken=tkAt) and not (msDelphi in CurrentModeswitches) then diff --git a/packages/fcl-passrc/tests/tcresolver.pas b/packages/fcl-passrc/tests/tcresolver.pas index 74b1a81bff..65d7e9e6dc 100644 --- a/packages/fcl-passrc/tests/tcresolver.pas +++ b/packages/fcl-passrc/tests/tcresolver.pas @@ -915,6 +915,8 @@ type Procedure TestTypeHelper_EnumDotValueFail; Procedure TestTypeHelper_EnumHelperDotProcFail; Procedure TestTypeHelper_Enumerator; + Procedure TestTypeHelper_String; + Procedure TestTypeHelper_Boolean; Procedure TestTypeHelper_Constructor_NewInstance; Procedure TestTypeHelper_InterfaceFail; @@ -17079,6 +17081,54 @@ begin ParseProgram; end; +procedure TTestResolver.TestTypeHelper_String; +begin + StartProgram(false); + Add([ + '{$modeswitch typehelpers}', + 'type', + ' TStringHelper = type helper for String', + ' procedure DoIt;', + ' end;', + ' TCharHelper = type helper for char', + ' procedure Fly;', + ' end;', + 'procedure TStringHelper.DoIt;', + 'begin', + ' Self[1]:=Self[2];', + 'end;', + 'procedure TCharHelper.Fly;', + 'begin', + ' Self:=''c'';', + ' Self:=Self;', + 'end;', + 'begin', + ' ''abc''.DoIt;', + ' ''xyz''.DoIt();', + ' ''c''.Fly;', + '']); + ParseProgram; +end; + +procedure TTestResolver.TestTypeHelper_Boolean; +begin + StartProgram(false); + Add([ + '{$modeswitch typehelpers}', + 'type', + ' THelper = type helper for boolean', + ' procedure DoIt;', + ' end;', + 'procedure THelper.DoIt;', + 'begin', + ' Self:=not Self;', + 'end;', + 'begin', + ' false.DoIt;', + ' true.DoIt();']); + ParseProgram; +end; + procedure TTestResolver.TestTypeHelper_Constructor_NewInstance; var aMarker: PSrcMarker;