Mercurial > projects > ddmd
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); }