-
Notifications
You must be signed in to change notification settings - Fork 533
Description
I have the following header:
typedef int MyFlags;
#define FLAG_ONE 1
#define FLAG_TWO 2
class Test {
public:
void MyMethod(MyFlags a);
};
I would like to end up with Test.MyMethod
having MyFlags
as a parameter instead of int
.
To this end at first I var @enum = ctx.GenerateEnumFromMacros("MyFlags", "FLAG_(.*)")
.
I then use the following TypeMap
:
[TypeMap("MyFlags")]
public class MyFlagsMap : TypeMap {
internal static TagType Type { private get; set; }
public override Type SignatureType(TypePrinterContext ctx) {
return Type;
}
}
whereas MyFlagsMap.Type = new TagType(@enum)
.
This results in a stack overflow on calls such as typeMap.SignatureType(ctx).ToString()
(which are used at various points) as ToString
on Type
again goes over the type maps and calls ToString
on the signature type, repeat ad infinitum.
One potential solution is adding the following method to TypeMap
:
public virtual string Print(TypePrinterContext ctx)
{
return SignatureType(ctx).ToString();
}
and replacing all calls such as typeMap.SignatureType(ctx).ToString()
with typeMap.Print(ctx)
.
However, this would require modifications on the end of the user which is not ideal. Some other way to avoid the cycles here seems preferable, but I don't see a straightforward way of achieving that atm..
P.S.: For anyone stumbling across this issue seeking to accomplish something similar to me while a fix hasn't yet been implemented:
A simple workaround is initially picking a different name for the generated enum and renaming it it in the Postprocess
step.