diff --git a/packages/fcl-passrc/src/pasresolveeval.pas b/packages/fcl-passrc/src/pasresolveeval.pas index 971a5bfea2..8d53f394a5 100644 --- a/packages/fcl-passrc/src/pasresolveeval.pas +++ b/packages/fcl-passrc/src/pasresolveeval.pas @@ -177,11 +177,12 @@ const nIllegalAssignmentToForLoopVar = 3111; nFunctionHidesIdentifier_NonProc = 3112; nTypeXCannotBeExtendedByATypeHelper = 3113; - nDerivedXMustExtendASubClassY = 3114; - nDefaultPropertyNotAllowedInHelperForX = 3115; - nHelpersCannotBeUsedAsTypes = 3116; - nBitWiseOperationsAre32Bit = 3117; - nImplictConversionUnicodeToAnsi = 3118; + nTypeXCannotBeExtendedByARecordHelper = 3114; + nDerivedXMustExtendASubClassY = 3115; + nDefaultPropertyNotAllowedInHelperForX = 3116; + nHelpersCannotBeUsedAsTypes = 3117; + nBitWiseOperationsAre32Bit = 3118; + nImplictConversionUnicodeToAnsi = 3119; // using same IDs as FPC nVirtualMethodXHasLowerVisibility = 3250; // was 3050 @@ -306,6 +307,7 @@ resourcestring sCantAssignValuesToConstVariable = 'Can''t assign values to const variable'; sIllegalAssignmentToForLoopVar = 'Illegal assignment to for-loop variable "%s"'; sTypeXCannotBeExtendedByATypeHelper = 'Type "%s" cannot be extended by a type helper'; + sTypeXCannotBeExtendedByARecordHelper = 'Type "%s" cannot be extended by a record helper'; sDerivedXMustExtendASubClassY = 'Derived %s must extend a subclass of "%s" or the class itself'; sDefaultPropertyNotAllowedInHelperForX = 'Default property not allowed in helper for %s'; sHelpersCannotBeUsedAsTypes = 'helpers cannot be used as types'; diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index bc4f186479..1c745f199f 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -7158,16 +7158,16 @@ begin else if ((HelperForType.ClassType=TPasUnresolvedSymbolRef) and (HelperForType.CustomData is TResElDataBaseType)) then else - RaiseMsg(20190116200304,nTypeXCannotBeExtendedByATypeHelper, - sTypeXCannotBeExtendedByATypeHelper,[GetTypeDescription(HelperForType)],aClass); + RaiseMsg(20190116200304,nTypeXCannotBeExtendedByARecordHelper, + sTypeXCannotBeExtendedByARecordHelper,[GetTypeDescription(HelperForType)],aClass); end else begin // mode objfpc if (HelperForType.ClassType=TPasRecordType) then else - RaiseMsg(20190116200519,nTypeXCannotBeExtendedByATypeHelper, - sTypeXCannotBeExtendedByATypeHelper,[GetTypeDescription(HelperForType)],aClass); + RaiseMsg(20190116200519,nTypeXCannotBeExtendedByARecordHelper, + sTypeXCannotBeExtendedByARecordHelper,[GetTypeDescription(HelperForType)],aClass); end; okTypeHelper: begin diff --git a/packages/fcl-passrc/tests/tcresolver.pas b/packages/fcl-passrc/tests/tcresolver.pas index 097ba8d070..74b1a81bff 100644 --- a/packages/fcl-passrc/tests/tcresolver.pas +++ b/packages/fcl-passrc/tests/tcresolver.pas @@ -904,6 +904,7 @@ type Procedure TestClassHelper_DefaultClassProperty; Procedure TestClassHelper_MultipleScopeHelpers; Procedure TestRecordHelper; + Procedure TestRecordHelper_ForByteFail; Procedure TestRecordHelper_ClassNonStaticFail; Procedure TestRecordHelper_InheritedObjFPC; Procedure TestRecordHelper_Constructor_NewInstance; @@ -16751,6 +16752,20 @@ begin ParseProgram; end; +procedure TTestResolver.TestRecordHelper_ForByteFail; +begin + StartProgram(false); + Add([ + '{$mode objfpc}', + 'type', + ' TRecHelper = record helper for byte', + ' class var Glob: word;', + ' end;', + 'begin', + '']); + CheckResolverException('Type "Byte" cannot be extended by a record helper',nTypeXCannotBeExtendedByARecordHelper); +end; + procedure TTestResolver.TestRecordHelper_ClassNonStaticFail; begin StartProgram(false);