From 04a2b42f63c20e0edf9982f5c7fbff7520ee001e Mon Sep 17 00:00:00 2001 From: mattias Date: Sun, 20 Mar 2022 18:44:56 +0100 Subject: [PATCH] fcl-passrc: test forbidden anonymous function types --- packages/fcl-passrc/tests/tcresolver.pas | 41 ++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/packages/fcl-passrc/tests/tcresolver.pas b/packages/fcl-passrc/tests/tcresolver.pas index 6d737fdeba..49beed030b 100644 --- a/packages/fcl-passrc/tests/tcresolver.pas +++ b/packages/fcl-passrc/tests/tcresolver.pas @@ -892,6 +892,9 @@ type // anonymous procedure type Procedure TestProcTypeAnonymous_FunctionFunctionFail; + Procedure TestProcTypeAnonymous_ResultTypeFail; + Procedure TestProcTypeAnonymous_ArgumentFail; + Procedure TestProcTypeAnonymous_PropertyFail; // pointer Procedure TestPointer; @@ -16535,6 +16538,44 @@ begin nCannotNestAnonymousX); end; +procedure TTestResolver.TestProcTypeAnonymous_ResultTypeFail; +begin + StartProgram(false); + Add([ + 'function Fly: procedure;', + 'begin', + 'end;', + 'begin']); + CheckResolverException('Cannot nest anonymous procedural type', + nCannotNestAnonymousX); +end; + +procedure TTestResolver.TestProcTypeAnonymous_ArgumentFail; +begin + StartProgram(false); + Add([ + 'procedure Fly(p: procedure);', + 'begin', + 'end;', + 'begin']); + CheckResolverException('Cannot nest anonymous procedural type', + nCannotNestAnonymousX); +end; + +procedure TTestResolver.TestProcTypeAnonymous_PropertyFail; +begin + StartProgram(false); + Add([ + 'type', + ' TObject = class', + ' FProc: procedure;', + ' property Proc: procedure read FProc;', + ' end;', + 'begin']); + CheckParserException('Expected ";" at token "Identifier read" in file afile.pp at line 5 column 30', + nParserExpectTokenError); +end; + procedure TTestResolver.TestPointer; begin StartProgram(false);