fcl-passrc: resolver: error on record helper for byte in mode objfpc

git-svn-id: trunk@41272 -
This commit is contained in:
Mattias Gaertner 2019-02-10 00:22:18 +00:00
parent 3779d69075
commit cb1a53c680
3 changed files with 26 additions and 9 deletions

View File

@ -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';

View File

@ -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

View File

@ -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);