diff --git a/dmd2/func.c b/dmd2/func.c index 7a9dc42e..81121c65 100644 --- a/dmd2/func.c +++ b/dmd2/func.c @@ -105,25 +105,6 @@ FuncDeclaration::FuncDeclaration(Loc loc, Loc endloc, Identifier *id, StorageCla allowInlining = false; neverInline = false; availableExternally = true; // assume this unless proven otherwise - - // function types in ldc don't merge if the context parameter differs - // so we actually don't care about the function declaration, but only - // what kind of context parameter it has. - // however, this constructor is usually called from the parser, which - // unfortunately doesn't provide the information needed to get to the - // aggregate type. So we have to stick with the FuncDeclaration and - // just be sure we don't actually rely on the symbol it points to, - // but rather just the type of its context parameter. - // this means some function might have a function type pointing to - // another function declaration - - if (type) - { - assert(type->ty == Tfunction && "invalid function type"); - TypeFunction* tf = (TypeFunction*)type; - if (tf->funcdecl == NULL) - tf->funcdecl = this; - } #endif } diff --git a/dmd2/mangle.c b/dmd2/mangle.c index 03b1849f..4d876ed8 100644 --- a/dmd2/mangle.c +++ b/dmd2/mangle.c @@ -87,11 +87,7 @@ L1: tfn.isref = fd->storage_class & STCauto ? false : tfo->isref; tfn.trust = tfo->trust; tfn.next = NULL; // do not mangle return type -#if IN_LLVM - tfn.toDecoBuffer(&buf, 0, true); -#else tfn.toDecoBuffer(&buf, 0); -#endif } else if (sthis->type->deco) buf.writestring(sthis->type->deco); diff --git a/dmd2/mtype.c b/dmd2/mtype.c index 1baaa9b0..c7f7623a 100644 --- a/dmd2/mtype.c +++ b/dmd2/mtype.c @@ -135,10 +135,6 @@ unsigned char Type::mangleChar[TMAX]; unsigned short Type::sizeTy[TMAX]; StringTable Type::stringtable; -#if IN_LLVM -StringTable Type::deco_stringtable; -#endif - Type::Type(TY ty) { @@ -208,9 +204,6 @@ void Type::init() #endif { stringtable._init(1543); -#if IN_LLVM - deco_stringtable._init(); -#endif Lexer::initKeywords(); for (size_t i = 0; i < TMAX; i++) @@ -1537,7 +1530,7 @@ char *MODtoChars(unsigned char mod) * flag 0x100 do not do const/invariant */ -void Type::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) // Possible conflict from merge +void Type::toDecoBuffer(OutBuffer *buf, int flag) { if (flag != mod && flag != 0x100) { @@ -1651,7 +1644,7 @@ Type *Type::merge() //if (next) //next = next->merge(); - toDecoBuffer(&buf, 0, false); + toDecoBuffer(&buf, 0); sv = stringtable.update((char *)buf.data, buf.offset); if (sv->ptrvalue) { t = (Type *) sv->ptrvalue; @@ -1665,28 +1658,7 @@ Type *Type::merge() else { sv->ptrvalue = this; - -#if IN_LLVM - // we still need deco strings to be unique - // or Type::equals fails, which breaks a bunch of stuff, - // like covariant member function overloads. - // TODO: Check if and why this is still needed. - OutBuffer mangle; - toDecoBuffer(&mangle, 0, true); - StringValue* sv2 = deco_stringtable.update((char *)mangle.data, mangle.offset); - if (sv2->ptrvalue) - { Type* t2 = (Type *) sv2->ptrvalue; - assert(t2->deco); - deco = t2->deco; - } - else - { - sv2->ptrvalue = this; - deco = (char *)sv2->toDchars(); - } -#else deco = (char *)sv->toDchars(); -#endif //printf("new value, deco = '%s' %p\n", t->deco, t->deco); } } @@ -1705,7 +1677,7 @@ Type *Type::merge2() if (!t->deco) return t->merge(); - StringValue *sv = deco_stringtable.lookup((char *)t->deco, strlen(t->deco)); + StringValue *sv = stringtable.lookup((char *)t->deco, strlen(t->deco)); if (sv && sv->ptrvalue) { t = (Type *) sv->ptrvalue; assert(t->deco); @@ -2243,7 +2215,7 @@ Identifier *Type::getTypeInfoIdent(int internal) buf.writeByte(mangleChar[((TypeArray *)this)->next->ty]); } else - toDecoBuffer(&buf, 0, true); + toDecoBuffer(&buf, 0); size_t len = buf.offset; buf.writeByte(0); @@ -2398,12 +2370,12 @@ TypeNext::TypeNext(TY ty, Type *next) this->next = next; } -void TypeNext::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeNext::toDecoBuffer(OutBuffer *buf, int flag) { - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); assert(next != this); //printf("this = %p, ty = %d, next = %p, ty = %d\n", this, this->ty, next, next->ty); - next->toDecoBuffer(buf, (flag & 0x100) ? 0 : mod, mangle); + next->toDecoBuffer(buf, (flag & 0x100) ? 0 : mod); } void TypeNext::checkDeprecated(Loc loc, Scope *sc) @@ -3515,14 +3487,14 @@ void TypeVector::toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod) buf->writestring(")"); } -void TypeVector::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeVector::toDecoBuffer(OutBuffer *buf, int flag) { if (flag != mod && flag != 0x100) { MODtoDecoBuffer(buf, mod); } buf->writestring("Nh"); - basetype->toDecoBuffer(buf, (flag & 0x100) ? 0 : mod, mangle); + basetype->toDecoBuffer(buf, (flag & 0x100) ? 0 : mod); } d_uns64 TypeVector::size(Loc loc) @@ -4083,9 +4055,9 @@ Lerror: return Type::terror; } -void TypeSArray::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeSArray::toDecoBuffer(OutBuffer *buf, int flag) { - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); if (dim) buf->printf("%llu", dim->toInteger()); if (next) @@ -4094,7 +4066,7 @@ void TypeSArray::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) * level, since for T[4][3], any const should apply to the T, * not the [4]. */ - next->toDecoBuffer(buf, (flag & 0x100) ? flag : mod, mangle); + next->toDecoBuffer(buf, (flag & 0x100) ? flag : mod); } void TypeSArray::toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod) @@ -4387,11 +4359,11 @@ void TypeDArray::resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol } } -void TypeDArray::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeDArray::toDecoBuffer(OutBuffer *buf, int flag) { - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); if (next) - next->toDecoBuffer(buf, (flag & 0x100) ? 0 : mod, mangle); + next->toDecoBuffer(buf, (flag & 0x100) ? 0 : mod); } void TypeDArray::toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod) @@ -4753,11 +4725,11 @@ Expression *TypeAArray::dotExp(Scope *sc, Expression *e, Identifier *ident, int return e; } -void TypeAArray::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeAArray::toDecoBuffer(OutBuffer *buf, int flag) { - Type::toDecoBuffer(buf, flag, mangle); - index->toDecoBuffer(buf, 0, mangle); - next->toDecoBuffer(buf, (flag & 0x100) ? 0 : mod, mangle); + Type::toDecoBuffer(buf, flag); + index->toDecoBuffer(buf, 0); + next->toDecoBuffer(buf, (flag & 0x100) ? 0 : mod); } void TypeAArray::toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod) @@ -5144,9 +5116,6 @@ TypeFunction::TypeFunction(Parameters *parameters, Type *treturn, int varargs, e this->iswild = false; this->fargs = NULL; -#if IN_LLVM - this->funcdecl = NULL; -#endif if (stc & STCpure) this->purity = PUREfwdref; if (stc & STCnothrow) @@ -5374,7 +5343,7 @@ Lnotcovariant: return 2; } -void TypeFunction::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeFunction::toDecoBuffer(OutBuffer *buf, int flag) { unsigned char mc; //printf("TypeFunction::toDecoBuffer() this = %p %s\n", this, toChars()); @@ -5422,53 +5391,12 @@ void TypeFunction::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) } } -#if IN_LLVM - // if we're not producing a mangle string, add the this - // type to prevent merging different member function - if (!mangle && funcdecl) - { - if (funcdecl->needThis()) - { - AggregateDeclaration* ad = funcdecl->isMember2(); - buf->writeByte('M'); - ad->type->toDecoBuffer(buf, 0, false); - } - if (FuncLiteralDeclaration *literal = funcdecl->isFuncLiteralDeclaration()) { - // Never merge types of function literals of different kind - if (literal->tok == TOKdelegate) { - buf->writeByte('D'); - } else if (literal->tok == TOKfunction) { - buf->writeByte('F'); - } else if (literal->tok == TOKreserved) { - static int counter = 0; - buf->writeByte('L'); - // And never merge types of lambdas, because we don't know whether - // they need a nested context argument or not. - buf->printf("%i", counter++); - } - } - /* BUG This causes problems with delegate types - On the other hand, the llvm type for nested functions *is* different - so not doing anything here may be lead to bugs! - A sane solution would be DtoType(Dsymbol)... - if (funcdecl->isNested()) - { - buf->writeByte('M'); - if (funcdecl->toParent2() && funcdecl->toParent2()->isFuncDeclaration()) - { - FuncDeclaration* fd = funcdecl->toParent2()->isFuncDeclaration(); - fd->type->toDecoBuffer(buf, 0, false); - } - }*/ - } -#endif - // Write argument types - Parameter::argsToDecoBuffer(buf, parameters, mangle); + Parameter::argsToDecoBuffer(buf, parameters); //if (buf->data[buf->offset - 1] == '@') halt(); buf->writeByte('Z' - varargs); // mark end of arg list if(next != NULL) - next->toDecoBuffer(buf, 0, mangle); + next->toDecoBuffer(buf, 0); inuse--; } @@ -6345,10 +6273,6 @@ Type *TypeFunction::addStorageClass(StorageClass stc) if (stc & STCsafe) tf->trust = TRUSTsafe; -#if IN_LLVM - tf->funcdecl = t->funcdecl; -#endif - tf->deco = tf->merge()->deco; t = tf; } @@ -6780,9 +6704,9 @@ Type *TypeIdentifier::syntaxCopy() return t; } -void TypeIdentifier::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeIdentifier::toDecoBuffer(OutBuffer *buf, int flag) { - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); const char *name = ident->toChars(); size_t len = strlen(name); buf->printf("%u%s", (unsigned)len, name); @@ -7487,10 +7411,10 @@ Type *TypeEnum::toBasetype() return sym->memtype->toBasetype(); } -void TypeEnum::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeEnum::toDecoBuffer(OutBuffer *buf, int flag) { const char *name = sym->mangle(); - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); buf->printf("%s", name); } @@ -7730,9 +7654,9 @@ Dsymbol *TypeTypedef::toDsymbol(Scope *sc) return sym; } -void TypeTypedef::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeTypedef::toDecoBuffer(OutBuffer *buf, int flag) { - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); const char *name = sym->mangle(); buf->printf("%s", name); } @@ -8031,11 +7955,11 @@ Dsymbol *TypeStruct::toDsymbol(Scope *sc) return sym; } -void TypeStruct::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeStruct::toDecoBuffer(OutBuffer *buf, int flag) { const char *name = sym->mangle(); //printf("TypeStruct::toDecoBuffer('%s') = '%s'\n", toChars(), name); - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); buf->printf("%s", name); } @@ -8565,11 +8489,11 @@ Dsymbol *TypeClass::toDsymbol(Scope *sc) return sym; } -void TypeClass::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeClass::toDecoBuffer(OutBuffer *buf, int flag) { const char *name = sym->mangle(); //printf("TypeClass::toDecoBuffer('%s' flag=%d mod=%x) = '%s'\n", toChars(), flag, mod, name); - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); buf->printf("%s", name); } @@ -9230,12 +9154,12 @@ void TypeTuple::toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod) Parameter::argsToCBuffer(buf, hgs, arguments, 0); } -void TypeTuple::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) +void TypeTuple::toDecoBuffer(OutBuffer *buf, int flag) { //printf("TypeTuple::toDecoBuffer() this = %p, %s\n", this, toChars()); - Type::toDecoBuffer(buf, flag, mangle); + Type::toDecoBuffer(buf, flag); OutBuffer buf2; - Parameter::argsToDecoBuffer(&buf2, arguments, mangle); + Parameter::argsToDecoBuffer(&buf2, arguments); int len = (int)buf2.offset; buf->printf("%d%.*s", len, len, (char *)buf2.extractData()); } @@ -9465,18 +9389,10 @@ int TypeNull::checkBoolean() return TRUE; } -#if IN_LLVM -void TypeNull::toDecoBuffer(OutBuffer *buf, int flag, bool mangle) -#else void TypeNull::toDecoBuffer(OutBuffer *buf, int flag) -#endif { //tvoidptr->toDecoBuffer(buf, flag); -#if IN_LLVM - Type::toDecoBuffer(buf, flag, mangle); -#else Type::toDecoBuffer(buf, flag); -#endif } void TypeNull::toCBuffer(OutBuffer *buf, Identifier *ident, HdrGenState *hgs) @@ -9602,31 +9518,15 @@ void Parameter::argsToCBuffer(OutBuffer *buf, HdrGenState *hgs, Parameters *argu static int argsToDecoBufferDg(void *ctx, size_t n, Parameter *arg) { -#if IN_LLVM - arg->toDecoBuffer((OutBuffer *)ctx, false); -#else arg->toDecoBuffer((OutBuffer *)ctx); -#endif return 0; } -#if IN_LLVM -static int argsToDecoBufferDg2(void *ctx, size_t n, Parameter *arg) -{ - arg->toDecoBuffer((OutBuffer *)ctx, true); - return 0; -} -#endif - -void Parameter::argsToDecoBuffer(OutBuffer *buf, Parameters *arguments, bool mangle) +void Parameter::argsToDecoBuffer(OutBuffer *buf, Parameters *arguments) { //printf("Parameter::argsToDecoBuffer()\n"); // Write argument types -#if IN_LLVM - foreach(arguments, mangle ? &argsToDecoBufferDg2 : &argsToDecoBufferDg, buf); -#else foreach(arguments, &argsToDecoBufferDg, buf); -#endif } /**************************************** @@ -9676,7 +9576,7 @@ Type *Parameter::isLazyArray() return NULL; } -void Parameter::toDecoBuffer(OutBuffer *buf, bool mangle) +void Parameter::toDecoBuffer(OutBuffer *buf) { if (storageClass & STCscope) buf->writeByte('M'); @@ -9707,7 +9607,7 @@ void Parameter::toDecoBuffer(OutBuffer *buf, bool mangle) type->toDecoBuffer(buf, mod); #else //type->toHeadMutable()->toDecoBuffer(buf, 0); - type->toDecoBuffer(buf, 0, mangle); + type->toDecoBuffer(buf, 0); #endif } diff --git a/dmd2/mtype.h b/dmd2/mtype.h index cfc583c1..5afd82c1 100644 --- a/dmd2/mtype.h +++ b/dmd2/mtype.h @@ -229,9 +229,6 @@ struct Type : Object static unsigned char mangleChar[TMAX]; static unsigned short sizeTy[TMAX]; static StringTable stringtable; -#if IN_LLVM - static StringTable deco_stringtable; -#endif // These tables are for implicit conversion of binary ops; // the indices are the type of operand one, followed by operand two. @@ -263,7 +260,7 @@ struct Type : Object virtual Type *semantic(Loc loc, Scope *sc); Type *trySemantic(Loc loc, Scope *sc); // append the mangleof or a string uniquely identifying this type to buf - virtual void toDecoBuffer(OutBuffer *buf, int flag = 0, bool mangle=false); + virtual void toDecoBuffer(OutBuffer *buf, int flag = 0); Type *merge(); Type *merge2(); virtual void toCBuffer(OutBuffer *buf, Identifier *ident, HdrGenState *hgs); @@ -400,7 +397,7 @@ struct TypeNext : Type Type *next; TypeNext(TY ty, Type *next); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void checkDeprecated(Loc loc, Scope *sc); Type *reliesOnTident(TemplateParameters *tparams = NULL); int hasWild(); @@ -468,11 +465,7 @@ struct TypeVector : Type Expression *dotExp(Scope *sc, Expression *e, Identifier *ident, int flag); char *toChars(); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); -#if IN_LLVM - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); -#else void toDecoBuffer(OutBuffer *buf, int flag); -#endif void toJson(JsonOut *json); MATCH deduceType(Scope *sc, Type *tparam, TemplateParameters *parameters, Objects *dedtypes, unsigned *wildmatch = NULL); #if CPP_MANGLE @@ -516,7 +509,7 @@ struct TypeSArray : TypeArray unsigned alignsize(); Type *semantic(Loc loc, Scope *sc); void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); void toJson(JsonOut *json); Expression *dotExp(Scope *sc, Expression *e, Identifier *ident, int flag); @@ -559,7 +552,7 @@ struct TypeDArray : TypeArray unsigned alignsize(); Type *semantic(Loc loc, Scope *sc); void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); void toJson(JsonOut *json); Expression *dotExp(Scope *sc, Expression *e, Identifier *ident, int flag); @@ -597,7 +590,7 @@ struct TypeAArray : TypeArray Type *semantic(Loc loc, Scope *sc); StructDeclaration *getImpl(); void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); void toJson(JsonOut *json); Expression *dotExp(Scope *sc, Expression *e, Identifier *ident, int flag); @@ -714,7 +707,7 @@ struct TypeFunction : TypeNext Type *syntaxCopy(); Type *semantic(Loc loc, Scope *sc); void purityLevel(); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer(OutBuffer *buf, Identifier *ident, HdrGenState *hgs); void toCBufferWithAttributes(OutBuffer *buf, Identifier *ident, HdrGenState* hgs, TypeFunction *attrs, TemplateDeclaration *td); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); @@ -745,8 +738,6 @@ struct TypeFunction : TypeNext #if IN_LLVM IrFuncTy irFty; - - FuncDeclaration* funcdecl; #endif }; @@ -809,7 +800,7 @@ struct TypeIdentifier : TypeQualified const char *kind(); Type *syntaxCopy(); //char *toChars(); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); void toJson(JsonOut *json); void resolve(Loc loc, Scope *sc, Expression **pe, Type **pt, Dsymbol **ps); @@ -892,7 +883,7 @@ struct TypeStruct : Type Type *syntaxCopy(); Type *semantic(Loc loc, Scope *sc); Dsymbol *toDsymbol(Scope *sc); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); void toJson(JsonOut *json); Expression *dotExp(Scope *sc, Expression *e, Identifier *ident, int flag); @@ -942,7 +933,7 @@ struct TypeEnum : Type char *toChars(); Type *semantic(Loc loc, Scope *sc); Dsymbol *toDsymbol(Scope *sc); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); void toJson(JsonOut *json); Expression *dotExp(Scope *sc, Expression *e, Identifier *ident, int flag); @@ -988,7 +979,7 @@ struct TypeTypedef : Type char *toChars(); Type *semantic(Loc loc, Scope *sc); Dsymbol *toDsymbol(Scope *sc); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); void toJson(JsonOut *json); Expression *dotExp(Scope *sc, Expression *e, Identifier *ident, int flag); @@ -1042,7 +1033,7 @@ struct TypeClass : Type Type *syntaxCopy(); Type *semantic(Loc loc, Scope *sc); Dsymbol *toDsymbol(Scope *sc); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); void toJson(JsonOut *json); Expression *dotExp(Scope *sc, Expression *e, Identifier *ident, int flag); @@ -1087,11 +1078,7 @@ struct TypeTuple : Type int equals(Object *o); Type *reliesOnTident(TemplateParameters *tparams = NULL); void toCBuffer2(OutBuffer *buf, HdrGenState *hgs, int mod); -#if IN_LLVM - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); -#else void toDecoBuffer(OutBuffer *buf, int flag); -#endif void toJson(JsonOut *json); Expression *getProperty(Loc loc, Identifier *ident, int flag); Expression *defaultInit(Loc loc); @@ -1118,7 +1105,7 @@ struct TypeNull : Type const char *kind(); Type *syntaxCopy(); - void toDecoBuffer(OutBuffer *buf, int flag, bool mangle); + void toDecoBuffer(OutBuffer *buf, int flag); MATCH implicitConvTo(Type *to); int checkBoolean(); @@ -1144,7 +1131,7 @@ struct Parameter : Object Parameter(StorageClass storageClass, Type *type, Identifier *ident, Expression *defaultArg); Parameter *syntaxCopy(); Type *isLazyArray(); - void toDecoBuffer(OutBuffer *buf, bool mangle); + void toDecoBuffer(OutBuffer *buf); int dyncast() { return DYNCAST_PARAMETER; } // kludge for template.isType() static Parameters *arraySyntaxCopy(Parameters *args); static char *argsTypesToChars(Parameters *args, int varargs); @@ -1152,7 +1139,7 @@ struct Parameter : Object static void argsCppMangle(OutBuffer *buf, CppMangleState *cms, Parameters *arguments, int varargs); #endif static void argsToCBuffer(OutBuffer *buf, HdrGenState *hgs, Parameters *arguments, int varargs); - static void argsToDecoBuffer(OutBuffer *buf, Parameters *arguments, bool mangle); + static void argsToDecoBuffer(OutBuffer *buf, Parameters *arguments); static int isTPL(Parameters *arguments); static size_t dim(Parameters *arguments); static Parameter *getNth(Parameters *arguments, size_t nth, size_t *pn = NULL);