www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - alias c=mixin(expr); disallowed, why?

reply Timothee Cour <thelastmammoth gmail.com> writes:
Is there a reason the language spec disallows this?

----
void main(){
auto a=mixin("1");//OK
alias b=a;//OK
mixin("alias c=a;");//OK
// alias c=mixin("a");//NG : Error: basic type expected, not mixin
}
----
Jun 22 2013
parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 06/22/2013 09:52 PM, Timothee Cour wrote:
 Is there a reason the language spec disallows this?

 ----
 void main(){
     auto a=mixin("1");//OK
     alias b=a;//OK
     mixin("alias c=a;");//OK
     // alias c=mixin("a");//NG : Error: basic type expected, not mixin
 }
 ----
No, it is arbitrary.
Jun 22 2013
next sibling parent reply Timothee Cour <thelastmammoth gmail.com> writes:
On Sat, Jun 22, 2013 at 2:47 PM, Timon Gehr <timon.gehr gmx.ch> wrote:

 On 06/22/2013 09:52 PM, Timothee Cour wrote:

 Is there a reason the language spec disallows this?

 ----
 void main(){
     auto a=mixin("1");//OK
     alias b=a;//OK
     mixin("alias c=a;");//OK
     // alias c=mixin("a");//NG : Error: basic type expected, not mixin
 }
 ----
No, it is arbitrary.
that's what i thought! same with template mixin's being restricated. ... can we fix it? it makes for cleaner code.
Jun 22 2013
parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 06/22/2013 11:51 PM, Timothee Cour wrote:
 On Sat, Jun 22, 2013 at 2:47 PM, Timon Gehr <timon.gehr gmx.ch
 <mailto:timon.gehr gmx.ch>> wrote:

     On 06/22/2013 09:52 PM, Timothee Cour wrote:

         Is there a reason the language spec disallows this?

         ----
         void main(){
              auto a=mixin("1");//OK
              alias b=a;//OK
              mixin("alias c=a;");//OK
              // alias c=mixin("a");//NG : Error: basic type expected,
         not mixin
         }
         ----


     No, it is arbitrary.


 that's what i thought!
 same with template mixin's being restricated.
?
 ... can we fix it?

 it makes for cleaner code.
It surely could be fixed if you want to spend the time hacking on DMD. I think the grammar is somewhat poorly designed in general.
Jun 22 2013
parent Timothee Cour <thelastmammoth gmail.com> writes:
On Sat, Jun 22, 2013 at 2:55 PM, Timon Gehr <timon.gehr gmx.ch> wrote:

 On 06/22/2013 11:51 PM, Timothee Cour wrote:

 On Sat, Jun 22, 2013 at 2:47 PM, Timon Gehr <timon.gehr gmx.ch
 <mailto:timon.gehr gmx.ch>> wrote:

     On 06/22/2013 09:52 PM, Timothee Cour wrote:

         Is there a reason the language spec disallows this?

         ----
         void main(){
              auto a=mixin("1");//OK
              alias b=a;//OK
              mixin("alias c=a;");//OK
              // alias c=mixin("a");//NG : Error: basic type expected,
         not mixin
         }
         ----


     No, it is arbitrary.


 that's what i thought!
 same with template mixin's being restricated.
?
they're restricted to declarations. I don't see the need for such restriction.
  ... can we fix it?
 it makes for cleaner code.
It surely could be fixed if you want to spend the time hacking on DMD. I think the grammar is somewhat poorly designed in general.
Jun 22 2013
prev sibling parent reply Jacob Carlborg <doob me.com> writes:
On 2013-06-22 23:47, Timon Gehr wrote:

 No, it is arbitrary.
I think the spec says you can only mixin whole expression. But for some reason you can use a mixin in a __traits expression without having the whole expression in a mixin. -- /Jacob Carlborg
Jun 23 2013
parent reply Timon Gehr <timon.gehr gmx.ch> writes:
On 06/23/2013 11:32 AM, Jacob Carlborg wrote:
 On 2013-06-22 23:47, Timon Gehr wrote:

 No, it is arbitrary.
I think the spec says you can only mixin whole expression.
That only means you cannot do things like eg: mixin("a*"); mixin("b"); but instead you need to do: mixin("a*b"); such that the string content forms a valid expression according to the grammar.
 But for some
 reason you can use a mixin in a __traits expression without having the
 whole expression in a mixin.
Example?
Jun 23 2013
parent Jacob Carlborg <doob me.com> writes:
On 2013-06-23 13:27, Timon Gehr wrote:

 Example?
(3) int a; alias Tuple!(__traits(getAttributes, mixin("a"))) attrs; -- /Jacob Carlborg
Jun 23 2013