Re: Logging Function Parameters

2018-03-19 Thread Aliak via Digitalmars-d-learn

On Sunday, 18 March 2018 at 23:17:58 UTC, Dennis wrote:

On Sunday, 18 March 2018 at 22:57:15 UTC, aliak wrote:

// But you get a:
// Error: Using the result of a comma expression is not 
allowed

// writeln(mixin(arguments!f));


You can't mix part of a function call in: "Mixed in text must 
form complete declarations, statements, or expressions." 
(https://dlang.org/articles/mixin.html)


In this case, it evaluates to a comma expression, which is 
deprecated. If you put the "writeln();" inside the mixin string 
it should form a complete statement and compile.


Ah! Thanks for the clarification.




Re: Logging Function Parameters

2018-03-18 Thread Seb via Digitalmars-d-learn

On Saturday, 17 March 2018 at 10:34:41 UTC, dom wrote:

Hi,

I am looking for a method to log the current function name + 
parameters.
Getting the name of the current function is simply possible 
with __PRETTY_FUNCTION__
Is there some possibility to generically access the parameters 
of a function such that they can be iterated and printed out?


currently i have something like this:
log.info(__PRETTY_FUNCTION__,  " ", parameter1, " ", 
parameter2);


i would like to get to something like that:
log.info(__PRETTY_FUNCTION__,  " ", parameters.join(", "));


You can't get the parameters names at the moment, but there's a 
PR for it:


https://github.com/dlang/dmd/pull/7821


Re: Logging Function Parameters

2018-03-18 Thread Dennis via Digitalmars-d-learn

On Sunday, 18 March 2018 at 22:57:15 UTC, aliak wrote:

// But you get a:
// Error: Using the result of a comma expression is not 
allowed

// writeln(mixin(arguments!f));


You can't mix part of a function call in: "Mixed in text must 
form complete declarations, statements, or expressions." 
(https://dlang.org/articles/mixin.html)


In this case, it evaluates to a comma expression, which is 
deprecated. If you put the "writeln();" inside the mixin string 
it should form a complete statement and compile.





Re: Logging Function Parameters

2018-03-18 Thread aliak via Digitalmars-d-learn

On Saturday, 17 March 2018 at 10:34:41 UTC, dom wrote:

Hi,

I am looking for a method to log the current function name + 
parameters.
Getting the name of the current function is simply possible 
with __PRETTY_FUNCTION__
Is there some possibility to generically access the parameters 
of a function such that they can be iterated and printed out?


currently i have something like this:
log.info(__PRETTY_FUNCTION__,  " ", parameter1, " ", 
parameter2);


i would like to get to something like that:
log.info(__PRETTY_FUNCTION__,  " ", parameters.join(", "));


You may be able to do something with a mixin. I tried this but I 
think I'm hitting a compiler bug, or I'm just using mixins wrong.


import std.stdio;

string arguments(alias f)() {
import std.meta: AliasSeq;
import std.traits: ParameterIdentifierTuple;
import std.array: join;
string[] args;
foreach (a; [AliasSeq!(ParameterIdentifierTuple!f)]) {
args ~= `"` ~ a ~ `: ", ` ~ a;
}
return args.join(`, ", ", `);
}

// calling writeln(mixin(arguments!f)) should do what you want.

void f(int a, int b, int c) {

// But you get a:
// Error: Using the result of a comma expression is not 
allowed

// writeln(mixin(arguments!f));


auto value = arguments!f; // "a: ", a, ", ", "b: ", b, ", ", 
"c: ", c

writeln(value);

// This is ok:
writeln("a: ", a, ", ", "b: ", b, ", ", "c: ", c);
}

void main() {
f(1, 2, 3);
}

You might be able to start with that and get something that 
works. Or maybe someone knows how to make the mixin part above 
compile. I have a feeling you may need to make the arguments() 
function return a string("p0: ", arg0, ", p1: ", arg1" ...) 
instead so that it's a full string instead of a comma separated 
expression maybe.


Cheers


Logging Function Parameters

2018-03-17 Thread dom via Digitalmars-d-learn

Hi,

I am looking for a method to log the current function name + 
parameters.
Getting the name of the current function is simply possible with 
__PRETTY_FUNCTION__
Is there some possibility to generically access the parameters of 
a function such that they can be iterated and printed out?


currently i have something like this:
log.info(__PRETTY_FUNCTION__,  " ", parameter1, " ", parameter2);

i would like to get to something like that:
log.info(__PRETTY_FUNCTION__,  " ", parameters.join(", "));