X-Sharp / XSharpPublic

Public repository for the source code for the XSharp Compiler, Runtime, Project System and Tools.
Apache License 2.0
89 stars 36 forks source link

Problems with UDC starting with a '@' #1488

Open DenGhostYY opened 3 weeks ago

DenGhostYY commented 3 weeks ago

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

RobertvanderHulst commented 3 weeks ago

Did this work before?

DenGhostYY commented 2 weeks ago

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

RobertvanderHulst commented 5 days ago

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?