Mercurial > projects > ddmd
diff dmd/TraitsExp.d @ 158:80f4806ffa13
overloadApply fixes
author | korDen |
---|---|
date | Sun, 19 Sep 2010 06:54:31 +0400 |
parents | af1bebfd96a4 |
children | e3afd1303184 |
line wrap: on
line diff
--- a/dmd/TraitsExp.d Thu Sep 16 01:34:10 2010 +0200 +++ b/dmd/TraitsExp.d Sun Sep 19 06:54:31 2010 +0400 @@ -46,21 +46,25 @@ { Expression e1; Expressions exps; - int fpvirtuals(void* param, FuncDeclaration f) - { Pvirtuals p = *cast(Pvirtuals*)param; + + bool visit(FuncDeclaration f) + { + Pvirtuals* p = &this; if (f.isVirtual()) - { Expression e; + { + Expression e; - if (p.e1.op == TOK.TOKdotvar) - { DotVarExp dve = cast(DotVarExp)p.e1; + if (p.e1.op == TOKdotvar) + { + DotVarExp dve = cast(DotVarExp)p.e1; e = new DotVarExp(Loc(0), dve.e1, f); } else e = new DsymbolExp(Loc(0), f); p.exps.push(e); } - return 0; + return false; } } @@ -260,19 +264,22 @@ Expressions exps = new Expressions(); FuncDeclaration f_; if (e.op == TOKvar) - { VarExp ve = cast(VarExp)e; + { + VarExp ve = cast(VarExp)e; f_ = ve.var.isFuncDeclaration(); } else if (e.op == TOKdotvar) - { DotVarExp dve = cast(DotVarExp)e; + { + DotVarExp dve = cast(DotVarExp)e; f_ = dve.var.isFuncDeclaration(); } else f_ = null; + Pvirtuals p; p.exps = exps; p.e1 = e; - overloadApply(f_, &p.fpvirtuals, &p); + overloadApply(f_, p); TupleExp tup = new TupleExp(loc, exps); return tup.semantic(sc);