digitalmars.D.learn - alias symbol name
- Radu (20/20) Jun 26 2018 Consider this https://run.dlang.io/is/HyY2qG
- Stefan Koch (2/22) Jun 26 2018 __traits(identifier, sym);
- Radu (4/31) Jun 26 2018 Him, that will print the symbol name, in my case `s`.
- Jonathan M Davis (7/41) Jun 26 2018 I'm pretty sure that that's impossible. As I understand it, the compiler
- Radu (6/52) Jun 26 2018 Ha! :) yeah I was pretty sure this will not work.
- Jonathan M Davis (7/20) Jun 26 2018 Feel free. I have no idea how likely it is to ever be implemented.
- Radu (5/23) Jun 26 2018 Code generation is at compile time and the target is C code, so
Consider this https://run.dlang.io/is/HyY2qG --- void main() { import std.traits; size_t s; pragma(msg, typeof(s).stringof); pragma(msg, mangledName!(typeof(s))); pragma(msg, mangledName!s); } --- It outputs: --- ulong m _D9onlineapp4mainFZ1sm --- I'm looking for a way to get the `s` type symbol name (size_t) not whatever the alias is pointing to (ulong in this case). Is there a way to obtain the alias symbol name?
Jun 26 2018
On Tuesday, 26 June 2018 at 09:14:11 UTC, Radu wrote:Consider this https://run.dlang.io/is/HyY2qG --- void main() { import std.traits; size_t s; pragma(msg, typeof(s).stringof); pragma(msg, mangledName!(typeof(s))); pragma(msg, mangledName!s); } --- It outputs: --- ulong m _D9onlineapp4mainFZ1sm --- I'm looking for a way to get the `s` type symbol name (size_t) not whatever the alias is pointing to (ulong in this case). Is there a way to obtain the alias symbol name?__traits(identifier, sym);
Jun 26 2018
On Tuesday, 26 June 2018 at 09:24:15 UTC, Stefan Koch wrote:On Tuesday, 26 June 2018 at 09:14:11 UTC, Radu wrote:Him, that will print the symbol name, in my case `s`. To cut to chase - I'm looking something that will print `size_t` for the symbol `s`.Consider this https://run.dlang.io/is/HyY2qG --- void main() { import std.traits; size_t s; pragma(msg, typeof(s).stringof); pragma(msg, mangledName!(typeof(s))); pragma(msg, mangledName!s); } --- It outputs: --- ulong m _D9onlineapp4mainFZ1sm --- I'm looking for a way to get the `s` type symbol name (size_t) not whatever the alias is pointing to (ulong in this case). Is there a way to obtain the alias symbol name?__traits(identifier, sym);
Jun 26 2018
On Tuesday, June 26, 2018 09:47:44 Radu via Digitalmars-d-learn wrote:On Tuesday, 26 June 2018 at 09:24:15 UTC, Stefan Koch wrote:I'm pretty sure that that's impossible. As I understand it, the compiler basically just replaces aliases with what they refer to and doesn't care what the original type was. And they _definitely_ don't affect mangling. If you're looking to treat an alias as anything different from what it refers to, you're going to be disappointed. - Jonathan M DavisOn Tuesday, 26 June 2018 at 09:14:11 UTC, Radu wrote:Him, that will print the symbol name, in my case `s`. To cut to chase - I'm looking something that will print `size_t` for the symbol `s`.Consider this https://run.dlang.io/is/HyY2qG --- void main() { import std.traits; size_t s; pragma(msg, typeof(s).stringof); pragma(msg, mangledName!(typeof(s))); pragma(msg, mangledName!s); } --- It outputs: --- ulong m _D9onlineapp4mainFZ1sm --- I'm looking for a way to get the `s` type symbol name (size_t) not whatever the alias is pointing to (ulong in this case). Is there a way to obtain the alias symbol name?__traits(identifier, sym);
Jun 26 2018
On Tuesday, 26 June 2018 at 10:19:44 UTC, Jonathan M Davis wrote:On Tuesday, June 26, 2018 09:47:44 Radu via Digitalmars-d-learn wrote:Ha! :) yeah I was pretty sure this will not work. I'm looking to generate some custom wrappers and knowing when something is really `size_t` is important, I have a backup plan, but having a compiler trait to get an alias symbol name would be great. Maybe this is worthy an enhancement request?On Tuesday, 26 June 2018 at 09:24:15 UTC, Stefan Koch wrote:I'm pretty sure that that's impossible. As I understand it, the compiler basically just replaces aliases with what they refer to and doesn't care what the original type was. And they _definitely_ don't affect mangling. If you're looking to treat an alias as anything different from what it refers to, you're going to be disappointed. - Jonathan M DavisOn Tuesday, 26 June 2018 at 09:14:11 UTC, Radu wrote:Him, that will print the symbol name, in my case `s`. To cut to chase - I'm looking something that will print `size_t` for the symbol `s`.Consider this https://run.dlang.io/is/HyY2qG --- void main() { import std.traits; size_t s; pragma(msg, typeof(s).stringof); pragma(msg, mangledName!(typeof(s))); pragma(msg, mangledName!s); } --- It outputs: --- ulong m _D9onlineapp4mainFZ1sm --- I'm looking for a way to get the `s` type symbol name (size_t) not whatever the alias is pointing to (ulong in this case). Is there a way to obtain the alias symbol name?__traits(identifier, sym);
Jun 26 2018
On Tuesday, June 26, 2018 11:28:11 Radu via Digitalmars-d-learn wrote:Feel free. I have no idea how likely it is to ever be implemented. However, if your custom wrappers are generated at compilation time rather than generated as files to be compiled later, then it's unnecessary to know whether an alias was used, since then you'd just use the exact type being used for that particular compilation. - Jonathan M DavisI'm pretty sure that that's impossible. As I understand it, the compiler basically just replaces aliases with what they refer to and doesn't care what the original type was. And they _definitely_ don't affect mangling. If you're looking to treat an alias as anything different from what it refers to, you're going to be disappointed. - Jonathan M DavisHa! :) yeah I was pretty sure this will not work. I'm looking to generate some custom wrappers and knowing when something is really `size_t` is important, I have a backup plan, but having a compiler trait to get an alias symbol name would be great. Maybe this is worthy an enhancement request?
Jun 26 2018
On Tuesday, 26 June 2018 at 12:19:16 UTC, Jonathan M Davis wrote:On Tuesday, June 26, 2018 11:28:11 Radu via Digitalmars-d-learn wrote:Code generation is at compile time and the target is C code, so it is important to keep the type `size_t` rather than `uint` or `ulong` for obvious reasons. I will submit and issue for a new trait.Feel free. I have no idea how likely it is to ever be implemented. However, if your custom wrappers are generated at compilation time rather than generated as files to be compiled later, then it's unnecessary to know whether an alias was used, since then you'd just use the exact type being used for that particular compilation. - Jonathan M Davis[...]Ha! :) yeah I was pretty sure this will not work. I'm looking to generate some custom wrappers and knowing when something is really `size_t` is important, I have a backup plan, but having a compiler trait to get an alias symbol name would be great. Maybe this is worthy an enhancement request?
Jun 26 2018