Re: Get body of a function as string
On Saturday, 29 June 2013 at 10:38:57 UTC, bearophile wrote: Jacob Carlborg: I remember someone someone modified DMD and added a .codeof property or similar. It was fairly easy. If there are enough use cases for it, then perhaps it's worth putting both the enhancement request for .codeof and its relative patch in Bugzilla. Bye, bearophile There is, or at least there will be!
Re: Get body of a function as string
Oh, hey! I remember participating in writing some of that :) Only Involved? You've written it. I've added only a few things. :)
Re: Get body of a function as string
On 2013-06-28 14:46, John Colvin wrote: Is there any way of getting the body of a function as a string? (Obviously only when the source code is available to the compiler) I remember someone someone modified DMD and added a .codeof property or similar. It was fairly easy. -- /Jacob Carlborg
Re: Get body of a function as string
Jacob Carlborg: I remember someone someone modified DMD and added a .codeof property or similar. It was fairly easy. If there are enough use cases for it, then perhaps it's worth putting both the enhancement request for .codeof and its relative patch in Bugzilla. Bye, bearophile
Get body of a function as string
Is there any way of getting the body of a function as a string? (Obviously only when the source code is available to the compiler)
Re: Get body of a function as string
John Colvin: Is there any way of getting the body of a function as a string? (Obviously only when the source code is available to the compiler) I think that currently there isn't a simple way to do it. What is your use case? Bye, bearophile
Re: Get body of a function as string
On Friday, 28 June 2013 at 13:18:39 UTC, bearophile wrote: John Colvin: Is there any way of getting the body of a function as a string? (Obviously only when the source code is available to the compiler) I think that currently there isn't a simple way to do it. What is your use case? Bye, bearophile I want to create a function with an identical body but different parameters: e.g. given a function int foo(int a){ return a+1; } automatically create a new function int foo(int a)(){ return a+1; } I'm trying to implement a sort of automatic compile-time currying.
Re: Get body of a function as string
And why don't you call the function from your clone function? Maybe this could help you: http://dpaste.1azy.net/fork/597affd2 I used it to generate my own rvalue functions because of the lack of rvalue references.
Re: Get body of a function as string
On Friday, 28 June 2013 at 13:55:54 UTC, Namespace wrote: And why don't you call the function from your clone function? Because the body of the new function needs to see the parameters as known at compile-time. Maybe this could help you: http://dpaste.1azy.net/fork/597affd2 I used it to generate my own rvalue functions because of the lack of rvalue references. Thanks, that was helpful for a few hints, but it doesn't fix this particular problem.
Re: Get body of a function as string
John Colvin: Because the body of the new function needs to see the parameters as known at compile-time. I think to curry a function all you need to know is its signature. And in std.traits probably there is all the functionality to see all kinds of function arguments, their names, tags, etc. Bye, bearophile
Re: Get body of a function as string
On Friday, 28 June 2013 at 20:50:55 UTC, John Colvin wrote: On Friday, 28 June 2013 at 13:55:54 UTC, Namespace wrote: And why don't you call the function from your clone function? Because the body of the new function needs to see the parameters as known at compile-time. Maybe this could help you: http://dpaste.1azy.net/fork/597affd2 I used it to generate my own rvalue functions because of the lack of rvalue references. Thanks, that was helpful for a few hints, but it doesn't fix this particular problem. Oh, hey! I remember participating in writing some of that :) Yeah, with traits, you can get enough info to extract all the information you want about the function to redeclare it any way you want. The only thing you *can't* get is... the body! If you have access to the source code of the function, you could redeclare it as a token string? eg: before: int foo(int a) { return a+1; } after: enum fooString = q{ return a+1; }; int foo(int a){mixin(fooString);} int foo()(int a){mixin(fooString);} Yeah... not a great solution. The only way I could see it happen would be with a compile __trait ? Does the compiler even have the info, or is it completely obliterated after the lex phase? The compiler *should* have the info, since it can pinpoint the coordinates of compilation errors. But I wouldn't know too much.