hxparse icon indicating copy to clipboard operation
hxparse copied to clipboard

A generic class can't have static fields error when a subclass of Parser is used inside a macro

Open joshtynjala opened this issue 3 years ago • 3 comments

I created a subclass of Parser, and I tried to use it inside a macro. It failed with compiler error "A generic class can't have static fields".

As you can see in #61, I was able to get my Parser subclass working inside a macro by fencing static public macro function parse(). However, I understand that this isn't the correct solution.

I suppose that a similar workaround that I can use for now is to copy all of the code except static public macro function parse() from Parser into a new class, and use that copy instead. However, I would prefer to use the real Parser so that I don't need to manually merge any changes that you make to hxparse in the future.

joshtynjala avatar Sep 13 '22 16:09 joshtynjala

Another workaround that seems to work for me is to fence the @:generic meta, while keeping static public macro function parse().

#if !macro
@:generic
#end

joshtynjala avatar Sep 13 '22 17:09 joshtynjala

Just in case it's relevant, my use-case is creating a custom parser for some kind of markup language. The idea is that I would use this parser in a macro to dynamically generate a TypeDefinition and call Context.defineType().

joshtynjala avatar Sep 13 '22 17:09 joshtynjala

Another workaround that seems to work for me is to fence the @:generic meta, while keeping static public macro function parse().

#if !macro
@:generic
#end

That looks like a good idea!

Simn avatar Sep 13 '22 17:09 Simn