| Thread overview | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
June 28, 2013 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) | ||||
June 28, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to John Colvin | 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
| |||
June 28, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to bearophile | 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.
| |||
June 28, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to John Colvin | 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. | |||
June 28, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Namespace | 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. | |||
June 28, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to John Colvin | 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
| |||
June 28, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to John Colvin | 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.
| |||
June 29, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to monarch_dodra | > Oh, hey! I remember participating in writing some of that :)
Only Involved? You've written it. I've added only a few things. :)
| |||
June 29, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to John Colvin | 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 | |||
June 29, 2013 Re: Get body of a function as string | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Jacob Carlborg | 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
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply