From 9517fbe7f69658784369b040945e041c19aa21e0 Mon Sep 17 00:00:00 2001 From: michael Date: Tue, 16 May 2017 12:00:08 +0000 Subject: [PATCH] * Fix bug ID #31819, array of procedure using inline def git-svn-id: trunk@36228 - --- packages/fcl-passrc/src/pparser.pp | 4 ++++ packages/fcl-passrc/tests/tctypeparser.pas | 28 ++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/packages/fcl-passrc/src/pparser.pp b/packages/fcl-passrc/src/pparser.pp index 8b9586fc08..7c2c726f86 100644 --- a/packages/fcl-passrc/src/pparser.pp +++ b/packages/fcl-passrc/src/pparser.pp @@ -1659,6 +1659,10 @@ begin else ParseExc(nParserArrayTypeSyntaxError,SParserArrayTypeSyntaxError); end; + // TPasProcedureType parsing has eaten the semicolon; + // We know it was a local definition if the array def (result) is the parent + if (Result.ElType is TPasProcedureType) and (Result.ElType.Parent=Result) then + UnGetToken; ok:=true; finally if not ok then diff --git a/packages/fcl-passrc/tests/tctypeparser.pas b/packages/fcl-passrc/tests/tctypeparser.pas index 78a2c23a49..647f57dbee 100644 --- a/packages/fcl-passrc/tests/tctypeparser.pas +++ b/packages/fcl-passrc/tests/tctypeparser.pas @@ -113,8 +113,12 @@ type procedure TestStaticArrayPlatform; Procedure TestStaticArrayPacked; Procedure TestStaticArrayTypedIndex; + Procedure TestStaticArrayOfMethod; + procedure TestStaticArrayOfProcedure; Procedure TestDynamicArray; Procedure TestDynamicArrayComment; + procedure TestDynamicArrayOfMethod; + procedure TestDynamicArrayOfProcedure; Procedure TestGenericArray; Procedure TestSimpleEnumerated; Procedure TestSimpleEnumeratedComment; @@ -2916,6 +2920,30 @@ begin AssertEquals('Array type','Boolean',TPasArrayType(TheType).IndexRange); end; +procedure TTestTypeParser.TestStaticArrayOfMethod; +begin + DoParseArray('array[0..127] of procedure of object','',TPasProcedureType); + AssertEquals('Array element type',TPasProcedureType,TPasArrayType(TheType).ElType.ClassType); +end; + +procedure TTestTypeParser.TestStaticArrayOfProcedure; +begin + DoParseArray('array[0..127] of procedure','',TPasProcedureType); + AssertEquals('Array element type',TPasProcedureType,TPasArrayType(TheType).ElType.ClassType); +end; + +procedure TTestTypeParser.TestDynamicArrayOfMethod; +begin + DoParseArray('array of procedure of object','',TPasProcedureType); + AssertEquals('Array element type',TPasProcedureType,TPasArrayType(TheType).ElType.ClassType); +end; + +procedure TTestTypeParser.TestDynamicArrayOfProcedure; +begin + DoParseArray('array of procedure ','',TPasProcedureType); + AssertEquals('Array element type',TPasProcedureType,TPasArrayType(TheType).ElType.ClassType); +end; + procedure TTestTypeParser.TestDynamicArray; begin DoParseArray('array of integer','',Nil);