Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

move dummyArg to templatesem.d make private #16945

Merged
merged 1 commit into from
Oct 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -3476,24 +3459,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 @@ -3579,18 +3544,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 @@ -3668,11 +3621,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
67 changes: 67 additions & 0 deletions compiler/src/dmd/templatesem.d
Original file line number Diff line number Diff line change
Expand Up @@ -2428,3 +2428,70 @@ 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;
}
private extern(C++) class DummyArgVisitor : Visitor
{
RootObject result;

alias visit = typeof(super).visit;
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;
}
}
Loading