# HG changeset patch # User korDen # Date 1282372706 -14400 # Node ID adf6f7f216eac80532055cf96dafb6635d6d9b2e # Parent 0aa7d1437ada553f35a92a0beabb88568b28eb64 CondExp.toCBuffer IsExp.toCBuffer TemplateValueParameter.toCBuffer Dsymbol.search TemplateDeclaration.overloadInsert bug fixed diff -r 0aa7d1437ada -r adf6f7f216ea dmd/CondExp.d --- a/dmd/CondExp.d Sat Aug 21 07:53:20 2010 +0400 +++ b/dmd/CondExp.d Sat Aug 21 10:38:26 2010 +0400 @@ -16,6 +16,7 @@ import dmd.TOK; import dmd.TY; import dmd.WANT; +import dmd.PREC; import dmd.Global; import dmd.backend.elem; @@ -25,6 +26,8 @@ import dmd.backend.TYM; import dmd.codegen.Util; +import dmd.expression.Util; + class CondExp : BinExp { Expression econd; @@ -192,7 +195,11 @@ void toCBuffer(OutBuffer buf, HdrGenState* hgs) { - assert(false); + expToCBuffer(buf, hgs, econd, PREC_oror); + buf.writestring(" ? "); + expToCBuffer(buf, hgs, e1, PREC_expr); + buf.writestring(" : "); + expToCBuffer(buf, hgs, e2, PREC_cond); } MATCH implicitConvTo(Type t) diff -r 0aa7d1437ada -r adf6f7f216ea dmd/Dsymbol.d --- a/dmd/Dsymbol.d Sat Aug 21 07:53:20 2010 +0400 +++ b/dmd/Dsymbol.d Sat Aug 21 10:38:26 2010 +0400 @@ -450,9 +450,19 @@ // Most Dsymbols aren't functions } + /********************************************* + * Search for ident as member of s. + * Input: + * flags: 1 don't find private members + * 2 don't give error messages + * 4 return null if ambiguous + * Returns: + * null if not found + */ Dsymbol search(Loc loc, Identifier ident, int flags) { - assert(false); + //printf("Dsymbol.search(this=%p,%s, ident='%s')\n", this, toChars(), ident.toChars()); + return null; } /*************************************** diff -r 0aa7d1437ada -r adf6f7f216ea dmd/IntegerExp.d --- a/dmd/IntegerExp.d Sat Aug 21 07:53:20 2010 +0400 +++ b/dmd/IntegerExp.d Sat Aug 21 10:38:26 2010 +0400 @@ -473,7 +473,8 @@ case TY.Tuns64: L4: - buf.printf("%juLU", v); + //buf.printf("%juLU", v); + buf.printf("%sLU", v); break; case TY.Tbit: diff -r 0aa7d1437ada -r adf6f7f216ea dmd/IsExp.d --- a/dmd/IsExp.d Sat Aug 21 07:53:20 2010 +0400 +++ b/dmd/IsExp.d Sat Aug 21 10:38:26 2010 +0400 @@ -28,6 +28,7 @@ import dmd.MATCH; import dmd.TypePointer; import dmd.Argument; +import dmd.Token; class IsExp : Expression { @@ -336,7 +337,33 @@ void toCBuffer(OutBuffer buf, HdrGenState* hgs) { - assert(false); + buf.writestring("is("); + targ.toCBuffer(buf, id, hgs); + if (tok2 != TOKreserved) + { + buf.printf(" %s %s", Token.toChars(tok), Token.toChars(tok2)); + } + else if (tspec) + { + if (tok == TOKcolon) + buf.writestring(" : "); + else + buf.writestring(" == "); + tspec.toCBuffer(buf, null, hgs); + } +version (DMDV2) { + if (parameters) + { + // First parameter is already output, so start with second + for (int i = 1; i < parameters.dim; i++) + { + buf.writeByte(','); + TemplateParameter tp = cast(TemplateParameter)parameters.data[i]; + tp.toCBuffer(buf, hgs); + } + } +} + buf.writeByte(')'); } } diff -r 0aa7d1437ada -r adf6f7f216ea dmd/PREC.d --- a/dmd/PREC.d Sat Aug 21 07:53:20 2010 +0400 +++ b/dmd/PREC.d Sat Aug 21 10:38:26 2010 +0400 @@ -28,4 +28,7 @@ PREC_primary, } -PREC precedence[TOK.TOKMAX]; \ No newline at end of file +PREC precedence[TOK.TOKMAX]; + +import dmd.EnumUtils; +mixin(BringToCurrentScope!(PREC)); \ No newline at end of file diff -r 0aa7d1437ada -r adf6f7f216ea dmd/TemplateDeclaration.d --- a/dmd/TemplateDeclaration.d Sat Aug 21 07:53:20 2010 +0400 +++ b/dmd/TemplateDeclaration.d Sat Aug 21 10:38:26 2010 +0400 @@ -252,48 +252,51 @@ */ bool overloadInsert(Dsymbol s) { + TemplateDeclaration *pf; TemplateDeclaration f; version (LOG) { - printf("TemplateDeclaration.overloadInsert('%s')\n", s.toChars()); + printf("TemplateDeclaration.overloadInsert('%.*s')\n", s.toChars()); } f = s.isTemplateDeclaration(); if (!f) return false; - for (TemplateDeclaration f2 = this; f2; f2 = f2.overnext) + TemplateDeclaration pthis = this; + for (pf = &pthis; *pf; pf = &(*pf).overnext) { - static if (false) { - // Conflict if TemplateParameter's match - // Will get caught anyway later with TemplateInstance, but - // should check it now. - if (f.parameters.dim != f2.parameters.dim) - goto Lcontinue; +static if (false) { + // Conflict if TemplateParameter's match + // Will get caught anyway later with TemplateInstance, but + // should check it now. + if (f.parameters.dim != f2.parameters.dim) + goto Lcontinue; - for (int i = 0; i < f.parameters.dim; i++) - { - TemplateParameter p1 = cast(TemplateParameter)f.parameters.data[i]; - TemplateParameter p2 = cast(TemplateParameter)f2.parameters.data[i]; + for (int i = 0; i < f.parameters.dim; i++) + { + TemplateParameter p1 = cast(TemplateParameter)f.parameters.data[i]; + TemplateParameter p2 = cast(TemplateParameter)f2.parameters.data[i]; - if (!p1.overloadMatch(p2)) - goto Lcontinue; - } + if (!p1.overloadMatch(p2)) + goto Lcontinue; + } - version (LOG) { - printf("\tfalse: conflict\n"); - } - return false; +version (LOG) { + printf("\tfalse: conflict\n"); +} + return false; - Lcontinue: +Lcontinue: ; - } +} } f.overroot = this; - ///*pf = f; + *pf = f; version (LOG) { printf("\ttrue: no conflict\n"); } + return true; } @@ -304,7 +307,9 @@ string kind() { - assert(false); + return (onemember && onemember.isAggregateDeclaration()) + ? onemember.kind() + : "template"; } string toChars() @@ -339,7 +344,7 @@ { assert(false); } - + // void toDocBuffer(OutBuffer *buf); /*************************************** @@ -359,7 +364,7 @@ int dedtypes_dim = dedtypes.dim; version (LOGM) { - printf("\n+TemplateDeclaration.matchWithInstance(this = %s, ti = %s, flag = %d)\n", toChars(), ti.toChars(), flag); + printf("\n+TemplateDeclaration.matchWithInstance(this = %.*s, ti = %.*s, flag = %d)\n", toChars(), ti.toChars(), flag); } static if (false) { @@ -376,9 +381,9 @@ if (ti.tiargs.dim > parameters_dim && !variadic) { version (LOGM) { - printf(" no match: more arguments than parameters\n"); + printf(" no match: more arguments than parameters\n"); } - return MATCHnomatch; + return MATCHnomatch; } assert(dedtypes_dim == parameters_dim); diff -r 0aa7d1437ada -r adf6f7f216ea dmd/TemplateValueParameter.d --- a/dmd/TemplateValueParameter.d Sat Aug 21 07:53:20 2010 +0400 +++ b/dmd/TemplateValueParameter.d Sat Aug 21 10:38:26 2010 +0400 @@ -111,7 +111,17 @@ void toCBuffer(OutBuffer buf, HdrGenState* hgs) { - assert(false); + valType.toCBuffer(buf, ident, hgs); + if (specValue) + { + buf.writestring(" : "); + specValue.toCBuffer(buf, hgs); + } + if (defaultValue) + { + buf.writestring(" = "); + defaultValue.toCBuffer(buf, hgs); + } } Object specialization()