TemplateInstance

https://dlang.org/spec/template.html#explicit_tmp_instantiation

Given: foo!(args) => name = foo tiargs = args

extern (C++)
class TemplateInstance : ScopeDsymbol {}

Constructors

this
this(Loc loc, Identifier ident, Objects* tiargs)
Undocumented in source.
this
this(Loc loc, TemplateDeclaration td, Objects* tiargs)

This constructor is only called when we figured out which function template to instantiate.

Members

Functions

accept
void accept(Visitor v)
Undocumented in source. Be warned that the author may not have intended to support it.
appendToModuleMember
Dsymbols* appendToModuleMember()

Append 'this' to the specific module members[]

declareParameters
void declareParameters(Scope* sc)

Declare parameters of template instance, initialize them with the template instance arguments.

equalsx
bool equalsx(TemplateInstance ti)

Compare proposed template instantiation with existing template instantiation. Note that this is not commutative because of the auto ref check.

expandMembers
void expandMembers(Scope* sc2)
Undocumented in source. Be warned that the author may not have intended to support it.
findBestMatch
bool findBestMatch(Scope* sc, Expressions* fargs)
Undocumented in source. Be warned that the author may not have intended to support it.
findTempDecl
bool findTempDecl(Scope* sc, WithScopeSymbol* pwithsym)

Find template declaration corresponding to template instance.

genIdent
Identifier genIdent(Objects* args)

This instance needs an identifier for name mangling purposes. Create one by taking the template declaration name and adding the type signature for it.

getIdent
Identifier getIdent()

Lazily generate identifier for template instance. This is because 75% of the ident's are never needed.

hasNestedArgs
bool hasNestedArgs(Objects* args, bool isstatic)

Determines if a TemplateInstance will need a nested generation of the TemplateDeclaration. Sets enclosing property if so, and returns != 0;

isDiscardable
bool isDiscardable()
isTemplateInstance
inout(TemplateInstance) isTemplateInstance()
Undocumented in source. Be warned that the author may not have intended to support it.
kind
const(char)* kind()
Undocumented in source. Be warned that the author may not have intended to support it.
needsCodegen
bool needsCodegen()

Returns true if this is not instantiated in non-root module, and is a part of non-speculative instantiatiation.

needsTypeInference
bool needsTypeInference(Scope* sc, int flag)

Determine if template instance is really a template function, and that template function needs to infer types from the function arguments.

oneMember
bool oneMember(Dsymbol* ps, Identifier ident)
Undocumented in source. Be warned that the author may not have intended to support it.
printInstantiationTrace
void printInstantiationTrace(Classification cl)

Given an error instantiating the TemplateInstance, give the nested TemplateInstance instantiations that got us here. Those are a list threaded into the nested scopes.

semanticTiargs
bool semanticTiargs(Scope* sc)

Run semantic on the elements of tiargs. Input: sc

syntaxCopy
TemplateInstance syntaxCopy(Dsymbol s)
Undocumented in source. Be warned that the author may not have intended to support it.
toAlias
Dsymbol toAlias()
Undocumented in source. Be warned that the author may not have intended to support it.
toChars
const(char)* toChars()
Undocumented in source. Be warned that the author may not have intended to support it.
toHash
size_t toHash()
Undocumented in source. Be warned that the author may not have intended to support it.
toPrettyCharsHelper
const(char)* toPrettyCharsHelper()
Undocumented in source. Be warned that the author may not have intended to support it.
tryExpandMembers
void tryExpandMembers(Scope* sc2)
Undocumented in source. Be warned that the author may not have intended to support it.
trySemantic3
void trySemantic3(Scope* sc2)
Undocumented in source. Be warned that the author may not have intended to support it.
updateTempDecl
bool updateTempDecl(Scope* sc, Dsymbol s)

Confirm s is a valid template, then store it. Input: sc s candidate symbol of template. It may be: TemplateDeclaration FuncDeclaration with findTemplateDeclRoot() != NULL OverloadSet which contains candidates

Properties

gagged
bool gagged [@property getter]

if the instantiation is done with error gagging

gagged
bool gagged [@property setter]
Undocumented in source. Be warned that the author may not have intended to support it.
havetempdecl
bool havetempdecl [@property getter]

if used second constructor

havetempdecl
bool havetempdecl [@property setter]
Undocumented in source. Be warned that the author may not have intended to support it.
nest
ushort nest [@property getter]
Undocumented in source. Be warned that the author may not have intended to support it.
nestDown
void nestDown [@property getter]
Undocumented in source. Be warned that the author may not have intended to support it.
nestUp
void nestUp [@property getter]
Undocumented in source. Be warned that the author may not have intended to support it.
semantictiargsdone
bool semantictiargsdone [@property getter]

has semanticTiargs() been done?

semantictiargsdone
bool semantictiargsdone [@property setter]
Undocumented in source. Be warned that the author may not have intended to support it.

Static functions

arraySyntaxCopy
Objects* arraySyntaxCopy(Objects* objs)
Undocumented in source. Be warned that the author may not have intended to support it.
semanticTiargs
bool semanticTiargs(Loc loc, Scope* sc, Objects* tiargs, int flags)

Run semantic of tiargs as arguments of template. Input: loc sc tiargs array of template arguments flags 1: replace const variables with their initializers 2: don't devolve Parameter to Type

Variables

aliasdecl
Dsymbol aliasdecl;
Undocumented in source.
argsym
ScopeDsymbol argsym;
Undocumented in source.
deferred
TemplateInstances* deferred;
Undocumented in source.
enclosing
Dsymbol enclosing;
Undocumented in source.
fargs
Expressions* fargs;
Undocumented in source.
hash
size_t hash;
Undocumented in source.
importedModules
Modules importedModules;
Undocumented in source.
inst
TemplateInstance inst;
Undocumented in source.
inuse
ubyte inuse;
Undocumented in source.
memberOf
Module memberOf;
Undocumented in source.
minst
Module minst;
Undocumented in source.
name
Identifier name;
Undocumented in source.
tdtypes
Objects tdtypes;
Undocumented in source.
tempdecl
Dsymbol tempdecl;
Undocumented in source.
tiargs
Objects* tiargs;
Undocumented in source.
tinst
TemplateInstance tinst;
Undocumented in source.
tnext
TemplateInstance tnext;
Undocumented in source.

Inherited Members

From ScopeDsymbol

members
Dsymbols* members;
Undocumented in source.
symtab
DsymbolTable symtab;
Undocumented in source.
endlinnum
uint endlinnum;
Undocumented in source.
syntaxCopy
ScopeDsymbol syntaxCopy(Dsymbol s)
Undocumented in source. Be warned that the author may not have intended to support it.
search
Dsymbol search(Loc loc, Identifier ident, int flags)

This function is #1 on the list of functions that eat cpu time. Be very, very careful about slowing it down.

importScope
void importScope(Dsymbol s, Visibility visibility)
Undocumented in source. Be warned that the author may not have intended to support it.
addAccessiblePackage
void addAccessiblePackage(Package p, Visibility visibility)
Undocumented in source. Be warned that the author may not have intended to support it.
isPackageAccessible
bool isPackageAccessible(Package p, Visibility visibility, int flags)
Undocumented in source. Be warned that the author may not have intended to support it.
isforwardRef
bool isforwardRef()
Undocumented in source. Be warned that the author may not have intended to support it.
multiplyDefined
void multiplyDefined(Loc loc, Dsymbol s1, Dsymbol s2)
Undocumented in source. Be warned that the author may not have intended to support it.
kind
const(char)* kind()
Undocumented in source. Be warned that the author may not have intended to support it.
findGetMembers
FuncDeclaration findGetMembers()

Look for member of the form: const(MemberInfo)[] getMembers(string); Returns NULL if not found

symtabInsert
Dsymbol symtabInsert(Dsymbol s)
Undocumented in source. Be warned that the author may not have intended to support it.
symtabLookup
Dsymbol symtabLookup(Dsymbol s, Identifier id)

Look up identifier in symbol table.

hasStaticCtorOrDtor
bool hasStaticCtorOrDtor()

Return true if any of the members are static ctors or static dtors, or if any members have members that are.

ForeachDg
alias ForeachDg = int delegate(size_t idx, Dsymbol s)
Undocumented in source.
_foreach
int _foreach(Scope* sc, Dsymbols* members, ForeachDg dg, size_t* pn)

Expands attribute declarations in members in depth first order. Calls dg(size_t symidx, Dsymbol *sym) for each member. If dg returns !=0, stops and returns that value else returns 0. Use this function to avoid the O(N + N^2/2) complexity of calculating dim and calling N times getNth.

isScopeDsymbol
inout(ScopeDsymbol) isScopeDsymbol()
Undocumented in source. Be warned that the author may not have intended to support it.
accept
void accept(Visitor v)
Undocumented in source. Be warned that the author may not have intended to support it.

Meta