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);