diff dmd/DotVarExp.d @ 72:2e2a5c3f943a

reduced warnings by adding override to the methods think this also normalizes different line endings used all over the place
author Trass3r
date Sat, 28 Aug 2010 16:19:48 +0200
parents cab4c37afb89
children ef02e2e203c2
line wrap: on
line diff
--- a/dmd/DotVarExp.d	Sat Aug 28 16:14:07 2010 +0200
+++ b/dmd/DotVarExp.d	Sat Aug 28 16:19:48 2010 +0200
@@ -1,42 +1,42 @@
-module dmd.DotVarExp;
-
-import dmd.Expression;
-import dmd.Declaration;
-import dmd.backend.elem;
-import dmd.UnaExp;
-import dmd.InterState;
-import dmd.OutBuffer;
-import dmd.Loc;
-import dmd.Scope;
-import dmd.IRState;
-import dmd.HdrGenState;
-import dmd.TOK;
-import dmd.TupleDeclaration;
-import dmd.ArrayTypes;
-import dmd.DsymbolExp;
-import dmd.TupleExp;
-import dmd.Global;
-import dmd.Type;
-import dmd.Dsymbol;
-import dmd.AggregateDeclaration;
-import dmd.VarDeclaration;
-import dmd.WANT;
-import dmd.TY;
-import dmd.ErrorExp;
-import dmd.FuncDeclaration;
-import dmd.STC;
-import dmd.GlobalExpressions;
-import dmd.VarExp;
-import dmd.StructLiteralExp;
-import dmd.PREC;
-
-import dmd.expression.Util;
-import dmd.codegen.Util;
-import dmd.backend.Util;
-import dmd.backend.mTY;
-import dmd.backend.OPER;
-import dmd.backend.TYM;
-
+module dmd.DotVarExp;
+
+import dmd.Expression;
+import dmd.Declaration;
+import dmd.backend.elem;
+import dmd.UnaExp;
+import dmd.InterState;
+import dmd.OutBuffer;
+import dmd.Loc;
+import dmd.Scope;
+import dmd.IRState;
+import dmd.HdrGenState;
+import dmd.TOK;
+import dmd.TupleDeclaration;
+import dmd.ArrayTypes;
+import dmd.DsymbolExp;
+import dmd.TupleExp;
+import dmd.Global;
+import dmd.Type;
+import dmd.Dsymbol;
+import dmd.AggregateDeclaration;
+import dmd.VarDeclaration;
+import dmd.WANT;
+import dmd.TY;
+import dmd.ErrorExp;
+import dmd.FuncDeclaration;
+import dmd.STC;
+import dmd.GlobalExpressions;
+import dmd.VarExp;
+import dmd.StructLiteralExp;
+import dmd.PREC;
+
+import dmd.expression.Util;
+import dmd.codegen.Util;
+import dmd.backend.Util;
+import dmd.backend.mTY;
+import dmd.backend.OPER;
+import dmd.backend.TYM;
+
 class DotVarExp : UnaExp
 {
 	Declaration var;
@@ -45,236 +45,236 @@
 
 	this(Loc loc, Expression e, Declaration var, int hasOverloads = 0)
 	{
-		super(loc, TOK.TOKdotvar, DotVarExp.sizeof, e);
-		//printf("DotVarExp()\n");
-		this.var = var;
-		this.hasOverloads = hasOverloads;
+		super(loc, TOK.TOKdotvar, DotVarExp.sizeof, e);
+		//printf("DotVarExp()\n");
+		this.var = var;
+		this.hasOverloads = hasOverloads;
 	}
 
-	Expression semantic(Scope sc)
+	override Expression semantic(Scope sc)
 	{
-version (LOGSEMANTIC) {
-		printf("DotVarExp.semantic('%s')\n", toChars());
-}
-		if (!type)
-		{
-			var = var.toAlias().isDeclaration();
-
-			TupleDeclaration tup = var.isTupleDeclaration();
-			if (tup)
-			{   
-				/* Replace:
-				 *	e1.tuple(a, b, c)
-				 * with:
-				 *	tuple(e1.a, e1.b, e1.c)
-				 */
-				Expressions exps = new Expressions;
-
-				exps.reserve(tup.objects.dim);
-				for (size_t i = 0; i < tup.objects.dim; i++)
-				{   
-					Object o = cast(Object)tup.objects.data[i];
-					if (auto e = cast(Expression)o)
-					{
-						if (e.op != TOK.TOKdsymbol)
-							error("%s is not a member", e.toChars());
-						else
-						{	
-							DsymbolExp ve = cast(DsymbolExp)e;
-							e = new DotVarExp(loc, e1, ve.s.isDeclaration());
-							exps.push(cast(void*)e);
-						}
-					} else {
-						error("%s is not an expression", o.toString());
-					}
-				}
-				Expression e = new TupleExp(loc, exps);
-				e = e.semantic(sc);
-				return e;
-			}
-
-			e1 = e1.semantic(sc);
-			type = var.type;
-			if (!type && global.errors)
-			{   
-				// var is goofed up, just return 0
-				return new ErrorExp();
-			}
-			assert(type);
-
-			if (!var.isFuncDeclaration())	// for functions, do checks after overload resolution
-			{
-				Type t1 = e1.type;
-				if (t1.ty == TY.Tpointer)
-					t1 = t1.nextOf();
-
-				type = type.addMod(t1.mod);
-
-				Dsymbol vparent = var.toParent();
-				AggregateDeclaration ad = vparent ? vparent.isAggregateDeclaration() : null;
-				e1 = getRightThis(loc, sc, ad, e1, var);
-				if (!sc.noaccesscheck)
-					accessCheck(loc, sc, e1, var);
-
-				VarDeclaration v = var.isVarDeclaration();
-				Expression e = expandVar(WANT.WANTvalue, v);
-				if (e)
-					return e;
-			}
-		}
-		//printf("-DotVarExp.semantic('%s')\n", toChars());
+version (LOGSEMANTIC) {
+		printf("DotVarExp.semantic('%s')\n", toChars());
+}
+		if (!type)
+		{
+			var = var.toAlias().isDeclaration();
+
+			TupleDeclaration tup = var.isTupleDeclaration();
+			if (tup)
+			{   
+				/* Replace:
+				 *	e1.tuple(a, b, c)
+				 * with:
+				 *	tuple(e1.a, e1.b, e1.c)
+				 */
+				Expressions exps = new Expressions;
+
+				exps.reserve(tup.objects.dim);
+				for (size_t i = 0; i < tup.objects.dim; i++)
+				{   
+					Object o = cast(Object)tup.objects.data[i];
+					if (auto e = cast(Expression)o)
+					{
+						if (e.op != TOK.TOKdsymbol)
+							error("%s is not a member", e.toChars());
+						else
+						{	
+							DsymbolExp ve = cast(DsymbolExp)e;
+							e = new DotVarExp(loc, e1, ve.s.isDeclaration());
+							exps.push(cast(void*)e);
+						}
+					} else {
+						error("%s is not an expression", o.toString());
+					}
+				}
+				Expression e = new TupleExp(loc, exps);
+				e = e.semantic(sc);
+				return e;
+			}
+
+			e1 = e1.semantic(sc);
+			type = var.type;
+			if (!type && global.errors)
+			{   
+				// var is goofed up, just return 0
+				return new ErrorExp();
+			}
+			assert(type);
+
+			if (!var.isFuncDeclaration())	// for functions, do checks after overload resolution
+			{
+				Type t1 = e1.type;
+				if (t1.ty == TY.Tpointer)
+					t1 = t1.nextOf();
+
+				type = type.addMod(t1.mod);
+
+				Dsymbol vparent = var.toParent();
+				AggregateDeclaration ad = vparent ? vparent.isAggregateDeclaration() : null;
+				e1 = getRightThis(loc, sc, ad, e1, var);
+				if (!sc.noaccesscheck)
+					accessCheck(loc, sc, e1, var);
+
+				VarDeclaration v = var.isVarDeclaration();
+				Expression e = expandVar(WANT.WANTvalue, v);
+				if (e)
+					return e;
+			}
+		}
+		//printf("-DotVarExp.semantic('%s')\n", toChars());
 		return this;
 	}
 
-	int isLvalue()
+	override int isLvalue()
 	{
 		return 1;
 	}
 
-	Expression toLvalue(Scope sc, Expression e)
+	override Expression toLvalue(Scope sc, Expression e)
 	{
-		//printf("DotVarExp::toLvalue(%s)\n", toChars());
+		//printf("DotVarExp::toLvalue(%s)\n", toChars());
 		return this;
 	}
 
-	Expression modifiableLvalue(Scope sc, Expression e)
+	override Expression modifiableLvalue(Scope sc, Expression e)
 	{
-static if (false) {
-		printf("DotVarExp::modifiableLvalue(%s)\n", toChars());
-		printf("e1.type = %s\n", e1.type.toChars());
-		printf("var.type = %s\n", var.type.toChars());
-}
-
-		if (var.isCtorinit())
-		{	
-			// It's only modifiable if inside the right constructor
-			Dsymbol s = sc.func;
-			while (true)
-			{
-				FuncDeclaration fd = null;
-				if (s)
-					fd = s.isFuncDeclaration();
-				if (fd && ((fd.isCtorDeclaration() && var.storage_class & STC.STCfield) ||
-					(fd.isStaticCtorDeclaration() && !(var.storage_class & STC.STCfield))) &&
-					fd.toParent() == var.toParent() && e1.op == TOK.TOKthis)
-				{
-					VarDeclaration v = var.isVarDeclaration();
-					assert(v);
-					v.ctorinit = 1;
-					//printf("setting ctorinit\n");
-				}
-				else
-				{
-					if (s)
-					{   
-						s = s.toParent2();
-						continue;
-					}
-					else
-					{
-						string p = var.isStatic() ? "static " : "";
-						error("can only initialize %sconst member %s inside %sconstructor", p, var.toChars(), p);
-					}
-				}
-				break;
-			}
-		}
-		else
-		{
-version (DMDV2) {
-			Type t1 = e1.type.toBasetype();
-
-			if (!t1.isMutable() || (t1.ty == TY.Tpointer && !t1.nextOf().isMutable()) ||
-				!var.type.isMutable() || !var.type.isAssignable() || var.storage_class & STC.STCmanifest)
-			{
-				error("cannot modify const/immutable expression %s", toChars());
-			}
-}
-		}
-
+static if (false) {
+		printf("DotVarExp::modifiableLvalue(%s)\n", toChars());
+		printf("e1.type = %s\n", e1.type.toChars());
+		printf("var.type = %s\n", var.type.toChars());
+}
+
+		if (var.isCtorinit())
+		{	
+			// It's only modifiable if inside the right constructor
+			Dsymbol s = sc.func;
+			while (true)
+			{
+				FuncDeclaration fd = null;
+				if (s)
+					fd = s.isFuncDeclaration();
+				if (fd && ((fd.isCtorDeclaration() && var.storage_class & STC.STCfield) ||
+					(fd.isStaticCtorDeclaration() && !(var.storage_class & STC.STCfield))) &&
+					fd.toParent() == var.toParent() && e1.op == TOK.TOKthis)
+				{
+					VarDeclaration v = var.isVarDeclaration();
+					assert(v);
+					v.ctorinit = 1;
+					//printf("setting ctorinit\n");
+				}
+				else
+				{
+					if (s)
+					{   
+						s = s.toParent2();
+						continue;
+					}
+					else
+					{
+						string p = var.isStatic() ? "static " : "";
+						error("can only initialize %sconst member %s inside %sconstructor", p, var.toChars(), p);
+					}
+				}
+				break;
+			}
+		}
+		else
+		{
+version (DMDV2) {
+			Type t1 = e1.type.toBasetype();
+
+			if (!t1.isMutable() || (t1.ty == TY.Tpointer && !t1.nextOf().isMutable()) ||
+				!var.type.isMutable() || !var.type.isAssignable() || var.storage_class & STC.STCmanifest)
+			{
+				error("cannot modify const/immutable expression %s", toChars());
+			}
+}
+		}
+
 		return this;
 	}
 
-	Expression optimize(int result)
+	override Expression optimize(int result)
 	{
-		//printf("DotVarExp.optimize(result = x%x) %s\n", result, toChars());
-		e1 = e1.optimize(result);
-
-		if (e1.op == TOK.TOKvar)
-		{	
-			VarExp ve = cast(VarExp)e1;
-			VarDeclaration v = ve.var.isVarDeclaration();
-			Expression e = expandVar(result, v);
-			if (e && e.op == TOK.TOKstructliteral)
-			{   
-				StructLiteralExp sle = cast(StructLiteralExp)e;
-				VarDeclaration vf = var.isVarDeclaration();
-				if (vf)
-				{
-					e = sle.getField(type, vf.offset);
-					if (e && e !is EXP_CANT_INTERPRET)
-						return e;
-				}
-			}
-		}
-		else if (e1.op == TOK.TOKstructliteral)
-		{   
-			StructLiteralExp sle = cast(StructLiteralExp)e1;
-			VarDeclaration vf = var.isVarDeclaration();
-			if (vf)
-			{
-				Expression e = sle.getField(type, vf.offset);
-				if (e && e !is EXP_CANT_INTERPRET)
-					return e;
-			}
-		}
-
+		//printf("DotVarExp.optimize(result = x%x) %s\n", result, toChars());
+		e1 = e1.optimize(result);
+
+		if (e1.op == TOK.TOKvar)
+		{	
+			VarExp ve = cast(VarExp)e1;
+			VarDeclaration v = ve.var.isVarDeclaration();
+			Expression e = expandVar(result, v);
+			if (e && e.op == TOK.TOKstructliteral)
+			{   
+				StructLiteralExp sle = cast(StructLiteralExp)e;
+				VarDeclaration vf = var.isVarDeclaration();
+				if (vf)
+				{
+					e = sle.getField(type, vf.offset);
+					if (e && e !is EXP_CANT_INTERPRET)
+						return e;
+				}
+			}
+		}
+		else if (e1.op == TOK.TOKstructliteral)
+		{   
+			StructLiteralExp sle = cast(StructLiteralExp)e1;
+			VarDeclaration vf = var.isVarDeclaration();
+			if (vf)
+			{
+				Expression e = sle.getField(type, vf.offset);
+				if (e && e !is EXP_CANT_INTERPRET)
+					return e;
+			}
+		}
+
 		return this;
 	}
 
-	Expression interpret(InterState istate)
+	override Expression interpret(InterState istate)
 	{
 		assert(false);
 	}
 
-	void toCBuffer(OutBuffer buf, HdrGenState* hgs)
+	override void toCBuffer(OutBuffer buf, HdrGenState* hgs)
 	{
-		expToCBuffer(buf, hgs, e1, PREC.PREC_primary);
-		buf.writeByte('.');
+		expToCBuffer(buf, hgs, e1, PREC.PREC_primary);
+		buf.writeByte('.');
 		buf.writestring(var.toChars());
 	}
 
-	void dump(int indent)
+	override void dump(int indent)
 	{
 		assert(false);
 	}
 
-	elem* toElem(IRState* irs)
+	override elem* toElem(IRState* irs)
 	{
-		// *(&e + offset)
-		//printf("DotVarExp.toElem('%s')\n", toChars());
-
-		VarDeclaration v = var.isVarDeclaration();
-		if (!v)
-		{
-			error("%s is not a field, but a %s", var.toChars(), var.kind());
-		}
-
-		elem* e = e1.toElem(irs);
-		Type tb1 = e1.type.toBasetype();
-
-		if (tb1.ty != TY.Tclass && tb1.ty != TY.Tpointer)
-			//e = el_una(OPaddr, TYnptr, e);
-			e = addressElem(e, tb1);
-
-		e = el_bin(OPER.OPadd, TYM.TYnptr, e, el_long(TYM.TYint, v ? v.offset : 0));
-		e = el_una(OPER.OPind, type.totym(), e);
-		if (tybasic(e.Ety) == TYM.TYstruct)
-		{
-			e.Enumbytes = cast(uint)type.size();
-		}
-		el_setLoc(e,loc);
-
+		// *(&e + offset)
+		//printf("DotVarExp.toElem('%s')\n", toChars());
+
+		VarDeclaration v = var.isVarDeclaration();
+		if (!v)
+		{
+			error("%s is not a field, but a %s", var.toChars(), var.kind());
+		}
+
+		elem* e = e1.toElem(irs);
+		Type tb1 = e1.type.toBasetype();
+
+		if (tb1.ty != TY.Tclass && tb1.ty != TY.Tpointer)
+			//e = el_una(OPaddr, TYnptr, e);
+			e = addressElem(e, tb1);
+
+		e = el_bin(OPER.OPadd, TYM.TYnptr, e, el_long(TYM.TYint, v ? v.offset : 0));
+		e = el_una(OPER.OPind, type.totym(), e);
+		if (tybasic(e.Ety) == TYM.TYstruct)
+		{
+			e.Enumbytes = cast(uint)type.size();
+		}
+		el_setLoc(e,loc);
+
 		return e;
 	}
 }