On 19-nov-10, at 08:08, Walter Bright wrote:
Fawzi Mohamed wrote:
From the discussion it seems that defining something like:
version(D_Version2){
mixin(`
template Const(T){
alias const(T) Const;
}
template Immutable(T){
alias immutable(T) Immutable;
}
immutable(T) Idup(T)(T val){
return val.idup;
}
alias const(char)[] cstring;
`);
} else {
template Const(T){
alias T Const;
}
template Immutable(T){
alias T Immutable;
}
T Idup(T)(T val){
return val.dup;
}
alias char[] string;
alias char[] cstring;
}
could help a lot
later one can simply replace Const! with const and Immutable! with
immutable, Idup replacement is more complicated, but doable
The problem with this approach is it requires the D1 compiler to be
able to parse D2 syntax, including recognizing all of D2's keywords.
yes you are right, I meant to put a mixin ther but then I forgot it.
What is not so clear is how to cope with scope, because I have lot
of delegates around that will need it.
For it a preprocessing step might really be the best thing, or
someone knows a smart way to cope with that?
Not sure what the issue is.
I don't find a valid D1 expression to put in place of scope, or to
somehow hide it, i.e. how do you write something like
module t;
void f(scope void delegate() action){
action();
}
void main(){
f(scope delegate(){
printf("bla\n");
});
}
so that it is valid D1 and D2?