[Issue 8261] std.traits.ParameterTypeTuple may break existing codes

2012-07-01 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=8261


Walter Bright  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED


--- Comment #5 from Walter Bright  2012-07-01 
00:44:00 PDT ---
Done in an alternate way:

https://github.com/D-Programming-Language/dmd/commit/08811d7abbb6cd6eeabef041122e1673b2044251

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 8261] std.traits.ParameterTypeTuple may break existing codes

2012-06-19 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=8261


Kenji Hara  changed:

   What|Removed |Added

   Keywords||pull, rejects-valid
   Severity|normal  |regression


--- Comment #4 from Kenji Hara  2012-06-19 07:11:27 PDT ---
I think this is a regression in 2.060head.
https://github.com/D-Programming-Language/dmd/pull/1018


To support getting parameter names, there are two pulls.

1. Add new trait: __traits(parameterNames, func)
https://github.com/D-Programming-Language/dmd/pull/951

2. An implementation of my idea: __traits(identifier, typeof(func))
https://github.com/D-Programming-Language/dmd/pull/1017

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 8261] std.traits.ParameterTypeTuple may break existing codes

2012-06-18 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=8261



--- Comment #3 from Kenji Hara  2012-06-18 17:33:11 PDT ---
(In reply to comment #2)
> You're right, it does break existing code. I thought it was a worthwhile
> tradeoff to get the functionality Manu needed.
> 
> But perhaps Manu's idea to do this tuple with a __traits is a better idea.

See also the notes in github.
https://github.com/D-Programming-Language/dmd/commit/65acb8ca382f3cd2abea058552d78c147163a8fa#commitcomment-1473583

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 8261] std.traits.ParameterTypeTuple may break existing codes

2012-06-18 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=8261


Walter Bright  changed:

   What|Removed |Added

 CC||bugzi...@digitalmars.com


--- Comment #2 from Walter Bright  2012-06-18 
17:16:17 PDT ---
You're right, it does break existing code. I thought it was a worthwhile
tradeoff to get the functionality Manu needed.

But perhaps Manu's idea to do this tuple with a __traits is a better idea.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---


[Issue 8261] std.traits.ParameterTypeTuple may break existing codes

2012-06-18 Thread d-bugmail
http://d.puremagic.com/issues/show_bug.cgi?id=8261


Manu  changed:

   What|Removed |Added

 CC||turkey...@gmail.com


--- Comment #1 from Manu  2012-06-18 13:31:45 PDT ---
(In reply to comment #0)
> In 2.060head, is(FuncType PT == function) -> PT contains parameter 
> identifiers.
> This change is introduced the commit:
> 
> https://github.com/D-Programming-Language/dmd/commit/65acb8ca382f3cd2abea058552d78c147163a8fa
> 
> It is useful for more metaprogramming, but this change may break existing 
> codes
> that using std.traits.ParameterTypeTuple. See below sample code:
> 
> void foo(int num, string name, int[int] map){}
> pragma(msg, ParameterTypeTuple!foo);
>   // In 2.059, prints (int, string, int[int])
>   // In 2.060head, prints (int num, string name, int[int] map)
> 
> void bar(ParameterTypeTuple!foo num) {}
> // Error: function test.bar parameter bar.num is already defined
> 
> 
> 
> If we change the implementation of ParameterTypeTuple template like follows:
> 
> template ParameterTypeTuple(func...)
> if (func.length == 1 && isCallable!func)
> {
> static if (is(FunctionTypeOf!(func) P == function))
> {
> //alias P ParameterTypeTuple;
> 
> // Remove parameter names that original function has.
> template Id(T) { alias T Id; }
> alias staticMap!(Id, P) ParameterTypeTuple;
> }
> else
> static assert(0, "argument has no parameters");
> }
> 
> We can get 'a tuple that contains only parameter types', but it also removes
> parameter storage class... breaking existing codes REVISITED!
> 
> void foo(ref int x){}
> pragma(msg, ParameterTypeTuple!foo); // will prints (int), not (ref int)
> 
> 
> 
> 
> In current dmd, all of function parameters have names, written by user, or
> named by compiler internally (e.g. _param_0). Then we never get a tuple of
> 'parameter type with storage class but unnamed'.
> Then, if we want to parameter type tuple with storage classes, we cannot 
> remove
> parameter name informations from the tuple.
> As far as I know, there is no workaround. So I think we should revert the
> commit 65acb8ca.

Can the new behaviour be expressed with a new ParameterTuple! trait or
something?
ParameterTypeTuple! makes sense as just types, but it would be nice to see a
suite: ParameterTyple! with all details, ParameterNameTuple! just names,
ParameterDefaultArgTuple!, you get the idea... ?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
--- You are receiving this mail because: ---