XSharpPublic icon indicating copy to clipboard operation
XSharpPublic copied to clipboard

Problems with UDC starting with a '@'

Open DenGhostYY opened this issue 1 year ago • 3 comments

Describe the bug There are problems with UDC starting with a '@'

To Reproduce

#xtranslate @enum { <var1>[(<desc1,...>)] [,<varN>[(<descN,...>)]] };
    => ;
exported:;;
    class var <var1> readonly;
    [;class var <varN> readonly];;
    inline class method initClass();;
        local i := 0;;
        ::addValue(::<var1> := ::new(++i, <"var1">[, <desc1>]));
        [;::addValue(::<varN> := ::new(++i, <"varN">, <descN>, nil))];; // [, <descN>] - error XBT0513; без NIL - warning XBT0124
    return

#xtranslate @enum { <var1>[(<desc1,...>)] };
    => ;
exported:;;
    class var <var1> readonly;;
    inline class method initClass();;
        ::addValue(::<var1> := ::new(1, <"var1">[, <desc1>]));;
    return

class ExampleEnum from Enum
    @enum {CONST1("desc1"), CONST2("desc2")}
endclass

Expected behavior (XBase++ ppo)

class ExampleEnum from Enum
    exported:;class var CONST1 readonly;class var  CONST2 readonly;inline class method initClass();local i := 0;::addValue(::CONST1 := ::new(++i, "CONST1",  "desc1"));::addValue(:: CONST2 := ::new(++i, "CONST2",  "desc2", nil));return
endclass

Actual behavior (X# ppo)

class ExampleEnum from Enum
    @enum {CONST1("desc1"), CONST2("desc2")}
endclass

with compiler error XS9002: Parser: unexpected input '@'

Additional context X# Compiler version 2.20.0.3 (public) -dialect:xBase++ -codepage:866 -lb -enforceself -memvar -xpp1 -vo1 -vo3 -vo4 -vo5 -vo9 -vo10 -vo12 -vo13 -vo14 -vo15 -vo16 -vo17 -reference:XSharp.Core.dll -reference:XSharp.RT.dll -reference:XSharp.XPP.dll

DenGhostYY avatar Jun 17 '24 04:06 DenGhostYY

Did this work before?

RobertvanderHulst avatar Jun 17 '24 17:06 RobertvanderHulst

We have simplified the UDC for enums, so we didn't check it on earlier versions

DenGhostYY avatar Jun 18 '24 04:06 DenGhostYY

The problem in the UDC is not in the @ character, but in the <desc1,...> markers inside the optional clauses.
If you change these to <desc1>, the example compiles. Your test code does not need a list match marker there. Do you know if your real code uses the list marker?

RobertvanderHulst avatar Jul 03 '24 16:07 RobertvanderHulst