diff --git a/packages/fcl-passrc/src/pastree.pp b/packages/fcl-passrc/src/pastree.pp index da998ec468..fd72a63b32 100644 --- a/packages/fcl-passrc/src/pastree.pp +++ b/packages/fcl-passrc/src/pastree.pp @@ -842,7 +842,7 @@ type pmExport, pmOverload, pmMessage, pmReintroduce, pmInline,pmAssembler, pmPublic, pmCompilerProc,pmExternal,pmForward, pmDispId, - pmNoReturn, pmfar); + pmNoReturn, pmfar, pmFinal); TProcedureModifiers = Set of TProcedureModifier; TProcedureMessageType = (pmtNone,pmtInteger,pmtString); @@ -1430,7 +1430,7 @@ const 'export', 'overload', 'message', 'reintroduce', 'inline','assembler','public', 'compilerproc','external','forward','dispid', - 'noreturn','far'); + 'noreturn','far','final'); VariableModifierNames : Array[TVariableModifier] of string = ('cvar', 'external', 'public', 'export', 'class', 'static'); diff --git a/packages/fcl-passrc/tests/tcclasstype.pas b/packages/fcl-passrc/tests/tcclasstype.pas index f259275808..07a812d361 100644 --- a/packages/fcl-passrc/tests/tcclasstype.pas +++ b/packages/fcl-passrc/tests/tcclasstype.pas @@ -109,6 +109,7 @@ type Procedure TestMethodVirtual; Procedure TestMethodVirtualSemicolon; Procedure TestMethodVirtualAbstract; + procedure TestMethodVirtualAbstractFinal; Procedure TestMethodOverride; procedure TestMethodDynamic; procedure TestMethodReintroduce; @@ -1003,6 +1004,16 @@ begin AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention); end; +procedure TTestClassType.TestMethodVirtualAbstractFinal; +begin + AddMember('Procedure DoSomething(A : Integer) virtual; abstract; final'); + ParseClass; + DefaultMethod; + AssertEquals('Default visibility',visDefault,Method1.Visibility); + AssertEquals('Virtual, abstract modifiers',[pmVirtual,pmAbstract,pmFinal],Method1.Modifiers); + AssertEquals('Default calling convention',ccDefault, Method1.ProcType.CallingConvention); +end; + procedure TTestClassType.TestMethodOverride; begin