[fpc-pascal] Constants in generics tests

Jeppe Johansen jeppe at j-software.dk
Fri Feb 15 19:52:24 CET 2019


Hi,

Do you know why this doesn't work?

type
   TGPIO = class
   public
     class function ReadValue: NativeUInt; virtual; abstract;
     class procedure SetValue(AValue: NativeUInt); virtual; abstract;

     class function GetPin(const AIndex: NativeInt): boolean; virtual;
   end;

   generic TStm32GPIO<const Base: integer> = class(TGPIO)
   public
     class function ReadValue: NativeUInt; override;
     class procedure SetValue(AValue: NativeUInt); override;
   end;

class function TGPIO.GetPin(const AIndex: NativeInt): boolean;
begin
   result:=Odd(ReadValue shr AIndex);
end;

class function TStm32GPIO.ReadValue: NativeUInt;
begin
   result:=PNativeUInt(Base)^;
end;

class procedure TStm32GPIO.SetValue(AValue: NativeUInt);
begin
   PNativeUInt(Base)^:=AValue;
end;

type GPIOA = specialize TStm32GPIO<$12400000>;

Best Regards,
Jeppe

On 2/15/19 5:22 PM, Ryan Joseph wrote:
> Here’s the latest changes which fixed the constant type checking and includes some tests. Are the tests in the correct format? They are named tgenconst*.pp.
>
> https://github.com/genericptr/freepascal/tree/generic_constants
>
> For example:
>
> {%FAIL}
> {$mode objfpc}
> program tgenconst8;
> type
> 	generic TByte<const U: Byte> = record end;	
> var
> 	a: specialize TByte<300>;
> begin
> end.
>
>
> This will now give an error because 300 is a SmallInt. That’s everything I can think of for now. Please let me know if this is ready to submit yet.
>
> Regards,
> 	Ryan Joseph
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal



More information about the fpc-pascal mailing list