diff dmd/TypeFunction.d @ 73:ef02e2e203c2

Updating to dmd2.033
author korDen
date Sat, 28 Aug 2010 19:42:41 +0400
parents 2e2a5c3f943a
children 43073c7c7769
line wrap: on
line diff
--- a/dmd/TypeFunction.d	Sat Aug 28 16:19:48 2010 +0200
+++ b/dmd/TypeFunction.d	Sat Aug 28 19:42:41 2010 +0400
@@ -10,6 +10,7 @@
 import dmd.Global;
 import dmd.STC;
 import dmd.MOD;
+import dmd.PROT;
 import dmd.Type;
 import dmd.Loc;
 import dmd.Scope;
@@ -158,13 +159,20 @@
 		}
 
 		if (tf.parameters)
-		{	size_t dim = Argument.dim(tf.parameters);
+		{	
+			/* Create a scope for evaluating the default arguments for the parameters
+			 */
+			Scope argsc = sc.push();
+			argsc.stc = STCundefined;			// don't inherit storage class
+			argsc.protection = PROT.PROTpublic;
+
+			size_t dim = Argument.dim(tf.parameters);
 
 			for (size_t i = 0; i < dim; i++)
 			{   Argument arg = Argument.getNth(tf.parameters, i);
 
 				tf.inuse++;
-				arg.type = arg.type.semantic(loc,sc);
+				arg.type = arg.type.semantic(loc, argsc);
 				if (tf.inuse == 1) tf.inuse--;
 
 				arg.type = arg.type.addStorageClass(arg.storageClass);
@@ -189,9 +197,9 @@
 
 				if (arg.defaultArg)
 				{
-					arg.defaultArg = arg.defaultArg.semantic(sc);
-					arg.defaultArg = resolveProperties(sc, arg.defaultArg);
-					arg.defaultArg = arg.defaultArg.implicitCastTo(sc, arg.type);
+					arg.defaultArg = arg.defaultArg.semantic(argsc);
+					arg.defaultArg = resolveProperties(argsc, arg.defaultArg);
+					arg.defaultArg = arg.defaultArg.implicitCastTo(argsc, arg.type);
 				}
 
 				/* If arg turns out to be a tuple, the number of parameters may
@@ -202,6 +210,7 @@
 					i--;
 				}
 			}
+			argsc.pop();
 		}
 		if (tf.next)
 		tf.deco = tf.merge().deco;
@@ -307,10 +316,10 @@
 			switch (linkage)
 			{
 				case LINKd:		p = null;	break;
-				case LINKc:		p = "C ";	break;
-				case LINKwindows:	p = "Windows ";	break;
-				case LINKpascal:	p = "Pascal ";	break;
-				case LINKcpp:	p = "C++ ";	break;
+				case LINKc:		p = " C";	break;
+				case LINKwindows:	p = " Windows";	break;
+				case LINKpascal:	p = " Pascal";	break;
+				case LINKcpp:	p = " C++";	break;
 				default:
 				assert(0);
 			}