Skip to content

Commit

Permalink
Remove flag parameter in TemplateParameter::matchArg()
Browse files Browse the repository at this point in the history
  • Loading branch information
9rnsr committed Dec 26, 2011
1 parent 01c2d59 commit 9d2ffd8
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 36 deletions.
44 changes: 13 additions & 31 deletions src/template.c
Expand Up @@ -713,12 +713,7 @@ MATCH TemplateDeclaration::matchWithInstance(TemplateInstance *ti,
printf("\tparameter[%d] is %s : %s\n", i, tp->ident->toChars(), ttp->specType ? ttp->specType->toChars() : "");
#endif

#if DMDV1
m2 = tp->matchArg(paramscope, ti->tiargs, i, parameters, dedtypes, &sparam);
#else
m2 = tp->matchArg(paramscope, ti->tiargs, i, parameters, dedtypes, &sparam, (flag & 2) ? 1 : 0);

#endif
//printf("\tm2 = %d\n", m2);

if (m2 == MATCHnomatch)
Expand Down Expand Up @@ -753,7 +748,7 @@ MATCH TemplateDeclaration::matchWithInstance(TemplateInstance *ti,
}

#if DMDV2
if (m && !(m == MATCHexact && flag == 2) && constraint && !(flag & 1))
if (m && constraint && !flag)
{ /* Check to see if constraint is satisfied.
*/
makeParamNamesVisibleInConstraint(paramscope, fargs);
Expand Down Expand Up @@ -1389,7 +1384,7 @@ MATCH TemplateDeclaration::deduceFunctionTemplateMatch(Scope *sc, Loc loc, Objec
*/
Declaration *sparam;
dedargs->tdata()[i] = oded;
MATCH m2 = tparam->matchArg(paramscope, dedargs, i, parameters, &dedtypes, &sparam, 0);
MATCH m2 = tparam->matchArg(paramscope, dedargs, i, parameters, &dedtypes, &sparam);
//printf("m2 = %d\n", m2);
if (!m2)
goto Lnomatch;
Expand Down Expand Up @@ -3097,12 +3092,11 @@ int TemplateTypeParameter::overloadMatch(TemplateParameter *tp)
* parameters[] template parameters
* dedtypes[] deduced arguments to template instance
* *psparam set to symbol declared and initialized to dedtypes[i]
* flags 1: don't do 'toHeadMutable()'
*/

MATCH TemplateTypeParameter::matchArg(Scope *sc, Objects *tiargs,
size_t i, TemplateParameters *parameters, Objects *dedtypes,
Declaration **psparam, int flags)
Declaration **psparam)
{
//printf("TemplateTypeParameter::matchArg()\n");
Type *t;
Expand All @@ -3123,7 +3117,6 @@ MATCH TemplateTypeParameter::matchArg(Scope *sc, Objects *tiargs,
{
goto Lnomatch;
}
flags |= 1; // already deduced, so don't to toHeadMutable()
}
}

Expand Down Expand Up @@ -3156,14 +3149,7 @@ MATCH TemplateTypeParameter::matchArg(Scope *sc, Objects *tiargs,
else
{
// So that matches with specializations are better
if (!(flags & 1))
m = MATCHconvert;

/* This is so that:
* template Foo(T), Foo!(const int), => ta == int
*/
// if (!(flags & 1))
// ta = ta->toHeadMutable();
m = MATCHconvert;

if (t)
{ // Must match already deduced type
Expand Down Expand Up @@ -3384,10 +3370,9 @@ int TemplateAliasParameter::overloadMatch(TemplateParameter *tp)
return 0;
}

MATCH TemplateAliasParameter::matchArg(Scope *sc,
Objects *tiargs, size_t i, TemplateParameters *parameters,
Objects *dedtypes,
Declaration **psparam, int flags)
MATCH TemplateAliasParameter::matchArg(Scope *sc, Objects *tiargs,
size_t i, TemplateParameters *parameters, Objects *dedtypes,
Declaration **psparam)
{
Object *sa;
Object *oarg;
Expand Down Expand Up @@ -3649,9 +3634,9 @@ int TemplateValueParameter::overloadMatch(TemplateParameter *tp)
}


MATCH TemplateValueParameter::matchArg(Scope *sc,
Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes,
Declaration **psparam, int flags)
MATCH TemplateValueParameter::matchArg(Scope *sc, Objects *tiargs,
size_t i, TemplateParameters *parameters, Objects *dedtypes,
Declaration **psparam)
{
//printf("TemplateValueParameter::matchArg()\n");

Expand Down Expand Up @@ -3709,13 +3694,11 @@ MATCH TemplateValueParameter::matchArg(Scope *sc,
e = e->semantic(sc);
e = e->implicitCastTo(sc, valType);
e = e->optimize(WANTvalue | WANTinterpret);
//e->type = e->type->toHeadMutable();

ei = ei->syntaxCopy();
ei = ei->semantic(sc);
ei = ei->implicitCastTo(sc, vt);
ei = ei->optimize(WANTvalue | WANTinterpret);
//ei->type = ei->type->toHeadMutable();
//printf("\tei: %s, %s\n", ei->toChars(), ei->type->toChars());
//printf("\te : %s, %s\n", e->toChars(), e->type->toChars());
if (!ei->equals(e))
Expand Down Expand Up @@ -3859,10 +3842,9 @@ int TemplateTupleParameter::overloadMatch(TemplateParameter *tp)
return 0;
}

MATCH TemplateTupleParameter::matchArg(Scope *sc,
Objects *tiargs, size_t i, TemplateParameters *parameters,
Objects *dedtypes,
Declaration **psparam, int flags)
MATCH TemplateTupleParameter::matchArg(Scope *sc, Objects *tiargs,
size_t i, TemplateParameters *parameters, Objects *dedtypes,
Declaration **psparam)
{
//printf("TemplateTupleParameter::matchArg()\n");

Expand Down
10 changes: 5 additions & 5 deletions src/template.h
Expand Up @@ -144,7 +144,7 @@ struct TemplateParameter

/* Match actual argument against parameter.
*/
virtual MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam, int flags = 0) = 0;
virtual MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam) = 0;

/* Create dummy argument based on parameter.
*/
Expand Down Expand Up @@ -172,7 +172,7 @@ struct TemplateTypeParameter : TemplateParameter
Object *specialization();
Object *defaultArg(Loc loc, Scope *sc);
int overloadMatch(TemplateParameter *);
MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam, int flags);
MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam);
void *dummyArg();
};

Expand Down Expand Up @@ -216,7 +216,7 @@ struct TemplateValueParameter : TemplateParameter
Object *specialization();
Object *defaultArg(Loc loc, Scope *sc);
int overloadMatch(TemplateParameter *);
MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam, int flags);
MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam);
void *dummyArg();
};

Expand All @@ -243,7 +243,7 @@ struct TemplateAliasParameter : TemplateParameter
Object *specialization();
Object *defaultArg(Loc loc, Scope *sc);
int overloadMatch(TemplateParameter *);
MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam, int flags);
MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam);
void *dummyArg();
};

Expand All @@ -264,7 +264,7 @@ struct TemplateTupleParameter : TemplateParameter
Object *specialization();
Object *defaultArg(Loc loc, Scope *sc);
int overloadMatch(TemplateParameter *);
MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam, int flags);
MATCH matchArg(Scope *sc, Objects *tiargs, size_t i, TemplateParameters *parameters, Objects *dedtypes, Declaration **psparam);
void *dummyArg();
};

Expand Down

0 comments on commit 9d2ffd8

Please sign in to comment.