Attributes with array of string constructor don't compile
Summary
It is not possible to use an attribute with constructor Create(Values: array of string);
.
System Information
- Operating system: Windows
- Processor architecture: x86
- Compiler version: trunk
- Device: Computer
Example Project
program EnumAttrTest;
{$mode objfpc}{$H+}
{$modeswitch prefixedattributes}
uses
SysUtils;
type
EnumValues = class(TCustomAttribute)
protected
FValues: TStringArray;
public
constructor Create(Values: array of string);
end;
[EnumValues(['YES', 'NO', 'COULD_BE'])] // EnumAttrTest.lpr(17,16) Error: Ordinal expression expected
TMyEnum = (meYes, meNo, meCouldBe);
const
cValues2: array[0..2] of string = ('YES', 'NO', 'COULD_BE');
type
[EnumValues(cValues2)] // EnumAttrTest.lpr(23,23) Error: Constant Expression expected
TMyEnum2 = (me2Yes, me2No, me2CouldBe);
{ EnumValues }
constructor EnumValues.Create(Values: array of string);
begin
FValues := Copy(Values, 0);
end;
begin
EnumValues.Create(['YES', 'NO', 'COULD_BE']); // is OK
EnumValues.Create(cValues2); // is OK
end.
What is the current bug behavior?
Compiler error when the attribute is used in the interface. When created as a normal class, everything is OK.
What is the expected (correct) behavior?
It should compile in the interface declaration as well.