Skip to content

Commit

Permalink
move dummyArg to templatesem.d make private
Browse files Browse the repository at this point in the history
  • Loading branch information
thewilsonator committed Oct 6, 2024
1 parent 2024098 commit 88c7745
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 64 deletions.
52 changes: 0 additions & 52 deletions compiler/src/dmd/dtemplate.d
Original file line number Diff line number Diff line change
Expand Up @@ -3235,10 +3235,6 @@ extern (C++) class TemplateParameter : ASTNode
return DYNCAST.templateparameter;
}

/* Create dummy argument based on parameter.
*/
abstract RootObject dummyArg();

override void accept(Visitor v)
{
v.visit(this);
Expand Down Expand Up @@ -3319,19 +3315,6 @@ extern (C++) class TemplateTypeParameter : TemplateParameter
return defaultType !is null;
}

override final RootObject dummyArg()
{
Type t = specType;
if (!t)
{
// Use this for alias-parameter's too (?)
if (!tdummy)
tdummy = new TypeIdentifier(loc, ident);
t = tdummy;
}
return t;
}

override void accept(Visitor v)
{
v.visit(this);
Expand Down Expand Up @@ -3475,24 +3458,6 @@ extern (C++) final class TemplateValueParameter : TemplateParameter
return defaultValue !is null;
}

override RootObject dummyArg()
{
Expression e = specValue;
if (!e)
{
// Create a dummy value
auto pe = cast(void*)valType in edummies;
if (!pe)
{
e = valType.defaultInit(Loc.initial);
edummies[cast(void*)valType] = e;
}
else
e = *pe;
}
return e;
}

override void accept(Visitor v)
{
v.visit(this);
Expand Down Expand Up @@ -3578,18 +3543,6 @@ extern (C++) final class TemplateAliasParameter : TemplateParameter
return defaultAlias !is null;
}

override RootObject dummyArg()
{
RootObject s = specAlias;
if (!s)
{
if (!sdummy)
sdummy = new Dsymbol();
s = sdummy;
}
return s;
}

override void accept(Visitor v)
{
v.visit(this);
Expand Down Expand Up @@ -3667,11 +3620,6 @@ extern (C++) final class TemplateTupleParameter : TemplateParameter
return false;
}

override RootObject dummyArg()
{
return null;
}

override void accept(Visitor v)
{
v.visit(this);
Expand Down
5 changes: 0 additions & 5 deletions compiler/src/dmd/frontend.h
Original file line number Diff line number Diff line change
Expand Up @@ -1446,7 +1446,6 @@ class TemplateParameter : public ASTNode
virtual bool hasDefaultArg() = 0;
const char* toChars() const override;
DYNCAST dyncast() const override;
virtual RootObject* dummyArg() = 0;
void accept(Visitor* v) override;
};

Expand All @@ -1463,7 +1462,6 @@ class TemplateAliasParameter final : public TemplateParameter
RootObject* specialization() override;
RootObject* defaultArg(const Loc& instLoc, Scope* sc) override;
bool hasDefaultArg() override;
RootObject* dummyArg() override;
void accept(Visitor* v) override;
};

Expand Down Expand Up @@ -1621,7 +1619,6 @@ class TemplateTypeParameter : public TemplateParameter
RootObject* specialization() final override;
RootObject* defaultArg(const Loc& instLoc, Scope* sc) final override;
bool hasDefaultArg() final override;
RootObject* dummyArg() final override;
void accept(Visitor* v) override;
};

Expand All @@ -1643,7 +1640,6 @@ class TemplateTupleParameter final : public TemplateParameter
RootObject* specialization() override;
RootObject* defaultArg(const Loc& instLoc, Scope* sc) override;
bool hasDefaultArg() override;
RootObject* dummyArg() override;
void accept(Visitor* v) override;
};

Expand All @@ -1660,7 +1656,6 @@ class TemplateValueParameter final : public TemplateParameter
RootObject* specialization() override;
RootObject* defaultArg(const Loc& instLoc, Scope* sc) override;
bool hasDefaultArg() override;
RootObject* dummyArg() override;
void accept(Visitor* v) override;
};

Expand Down
7 changes: 0 additions & 7 deletions compiler/src/dmd/template.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,6 @@ class TemplateParameter : public ASTNode

DYNCAST dyncast() const override { return DYNCAST_TEMPLATEPARAMETER; }

/* Create dummy argument based on parameter.
*/
virtual RootObject *dummyArg() = 0;
void accept(Visitor *v) override { v->visit(this); }
};

Expand All @@ -155,7 +152,6 @@ class TemplateTypeParameter : public TemplateParameter
RootObject *specialization() override final;
RootObject *defaultArg(const Loc &instLoc, Scope *sc) override final;
bool hasDefaultArg() override final;
RootObject *dummyArg() override final;
void accept(Visitor *v) override { v->visit(this); }
};

Expand Down Expand Up @@ -187,7 +183,6 @@ class TemplateValueParameter final : public TemplateParameter
RootObject *specialization() override;
RootObject *defaultArg(const Loc &instLoc, Scope *sc) override;
bool hasDefaultArg() override;
RootObject *dummyArg() override;
void accept(Visitor *v) override { v->visit(this); }
};

Expand All @@ -208,7 +203,6 @@ class TemplateAliasParameter final : public TemplateParameter
RootObject *specialization() override;
RootObject *defaultArg(const Loc &instLoc, Scope *sc) override;
bool hasDefaultArg() override;
RootObject *dummyArg() override;
void accept(Visitor *v) override { v->visit(this); }
};

Expand All @@ -225,7 +219,6 @@ class TemplateTupleParameter final : public TemplateParameter
RootObject *specialization() override;
RootObject *defaultArg(const Loc &instLoc, Scope *sc) override;
bool hasDefaultArg() override;
RootObject *dummyArg() override;
void accept(Visitor *v) override { v->visit(this); }
};

Expand Down
66 changes: 66 additions & 0 deletions compiler/src/dmd/templatesem.d
Original file line number Diff line number Diff line change
Expand Up @@ -2428,3 +2428,69 @@ void functionResolve(ref MatchAccumulator m, Dsymbol dstart, Loc loc, Scope* sc,
m.last = MATCH.nomatch;
}
}
/* Create dummy argument based on parameter.
*/
private RootObject dummyArg(TemplateParameter tp)
{
scope v = new DummyArgVisitor();
tp.accept(v);
return v.result;
}
extern(C++) class DummyArgVisitor : Visitor
{
RootObject result;

override void visit(TemplateTypeParameter ttp)
{
Type t = ttp.specType;
if (t)
{
result = t;
return;
}
// Use this for alias-parameter's too (?)
if (!ttp.tdummy)
ttp.tdummy = new TypeIdentifier(ttp.loc, ttp.ident);
result = ttp.tdummy;
}

override void visit(TemplateValueParameter tvp)
{
Expression e = tvp.specValue;
if (e)
{
result = e;
return;
}

// Create a dummy value
auto pe = cast(void*)tvp.valType in tvp.edummies;
if (pe)
{
result = *pe;
return;
}

e = tvp.valType.defaultInit(Loc.initial);
tvp.edummies[cast(void*)tvp.valType] = e;
result = e;
}

override void visit(TemplateAliasParameter tap)
{
RootObject s = tap.specAlias;
if (s)
{
result = s;
return;
}
if (!tap.sdummy)
tap.sdummy = new Dsymbol();
result = tap.sdummy;
}

override void visit(TemplateTupleParameter tap)
{
result = null;
}
}

0 comments on commit 88c7745

Please sign in to comment.