How to set linkage?

Quirin Schroll qs.il.paperinik at gmail.com
Wed Dec 20 15:14:10 UTC 2023


In the DMD compiler frontend, the type `TypeFunction` (cf. 
astbase.d) representing a function type has a `linkage` member. 
Setting this member when parsing seems to have no effect. How do 
I set the linkage of a function type?

For alias declarations which support setting function type 
linkage, in parse.d, it creates a `LinkageDeclaration`, which I 
cannot do because my function type is not declared, but 
(potentially) nested in something else.

My overall goal is to allow linkage as part of a function pointer 
/ delegate type:
```
void f(extern(C) void function() cFunctionPtr) { }
alias CFP = extern(C) void function();
void g(CFP cFunctionPtr) { }
```

I can already parse this, but `pragma(msg, typeof(&f), '\n', 
typeof(&g))` gives me:
```
void function(void function() cFunctionPtr)
void function((extern (C) void function()) cFunctionPtr)
```
This shows that the linkage of `f`’s parameter is not seen 
somehow, but when the linkage is seen, it properly does end up in 
the parameter’s type.


More information about the Digitalmars-d-learn mailing list