January 30, 2019 Re: How can I express the type of a function in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | On 01/30/2019 11:42 AM, H. S. Teoh wrote:
> On Wed, Jan 30, 2019 at 10:39:21AM -0800, Ali Çehreli via Digitalmars-d-learn wrote:
> [...]
>> I wonder why the inconsistency. On the other hand, .mangleof produces
>> just "add" when the function is extern(C). (?)
> [...]
>
> For extern(C), this is correct behaviour, because that's how a C
> function would be mangled (i.e., not mangled at all).
>
>
> T
>
I remember names like _add. Is that a Windows thing?
Ali
|
January 30, 2019 Re: How can I express the type of a function in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Wed, 30 Jan 2019 12:56:06 -0800, Ali Çehreli wrote:
> I remember names like _add. Is that a Windows thing?
A number of functions are implemented as manually-mangled names with preprocessor macros that forward to them. It's weird, but it happens.
|
January 30, 2019 Re: How can I express the type of a function in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On 1/30/19 1:39 PM, Ali Çehreli wrote:
> On 01/30/2019 07:47 AM, Steven Schveighoffer wrote:
> > On 1/30/19 12:14 AM, Sobaya wrote:
> >> I want to get a mangled name of a D function by
> >> `core.demangle.mangle`, but I'm in trouble because there are no ways
> >> to express a type of a function, which is used for a template argument
> >> of `mangle`.
> >>
> >> For example, it is wrong to use the type `int function(int,int)` to
> >> express the type of `int add(int,int)`.
> >> Because it expresses the type of a function POINTER, not just a function.
> >>
> >> The fuction name in a binary compiled this function is "_D3addFiiZi",
> >> but `mangle!(int function(int,int))("add")` returns "_D3addPFiiZi",
> >> which includes "P" meaning POINTER.
> >>
> >> How can I get the former one?
> >
> > Why not use add.mangleof?
> >
>
> add.mangleof includes the module name as well (_D6deneme3addFiiZi) but the OP wanted without (_D3addFiiZi).
But he says `The fuction name in a binary compiled this function is "_D3addFiiZi"`. So whatever he compiles as must be what mangleof reports, as it's the same entity generating the mangle. I don't know what his source code is.
-Steve
|
February 01, 2019 Re: How can I express the type of a function in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sobaya | On Wednesday, 30 January 2019 at 05:14:20 UTC, Sobaya wrote: > I want to get a mangled name of a D function by `core.demangle.mangle`, but I'm in trouble because there are no ways to express a type of a function, which is used for a template argument of `mangle`. There's a way: int add(int i, int j); static assert(is(typeof(add) == typeof(*(int function(int, int)).init))); Unfortunately there's no dedicated syntax for it, unlike C++. Weirdly enough, if you pragma(msg) a function type it prints it out in C++ syntax (e.g. `int(int, int)`), but if you type it yourself it won't compile. Then there's this oddity: https://issues.dlang.org/show_bug.cgi?id=19270 |
February 04, 2019 Re: How can I express the type of a function in D? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Sobaya | On Wednesday, 30 January 2019 at 05:14:20 UTC, Sobaya wrote:
> I want to get a mangled name of a D function by `core.demangle.mangle`, but I'm in trouble because there are no ways to express a type of a function, which is used for a template argument of `mangle`.
Did you consider `core.demangle.mangleFunc` instead?
|
Copyright © 1999-2021 by the D Language Foundation