Proposal: __traits(code, ...) and/or .codeof
F i L
witte2008 at gmail.com
Thu Mar 22 16:33:40 PDT 2012
Timon Gehr wrote:
> We have the macro keyword. I envision something like:
>
> macro replaceAggregate(macro newAggregate, macro loop :
> foreach(x; aggr){statements}, macro x, macro aggr, macro
> statements) {
> foreach(x; newAggregate){statements}
> }
>
> void main(){
> int[] a = [1,2,3];
> int[] b = [2,3,4];
> replaceAggregate(b, foreach(x;a){writeln(x);});
> }
>
> (The syntax looks horrible, but you get the idea: AST walking
> by pattern matching)
This looks substantially more complicated than what I had in
mind. I think it's a great idea, but something that could be
added after the initial functionality was there.
> macro until(macro condition, string str){
> while(!condition){
> mixin(str); // string and mixin not strictly necessary,
> // maybe enable the feature on macro params
> too
> }
> }
>
> void main(){
> bool done = false;
> int x;
> until(done){
> done = foo(x++);
> }
> }
>
> This is just a very rough sketch though, we would need a much
> more refined design. I think getting the symbol scoping right
> is most important.
I'm a bit confused about what's actually going on here, but it
certainly looks interesting. What exactly is being passed to
"string str" in the macro?
More information about the Digitalmars-d
mailing list