Add instance ti to TemplateDeclaration's table of instances. Return a handle we can use to later remove it if it fails instantiation.
Declare template parameter tp with value o, and install it in the scope sc.
Match function arguments against a specific template function. Input: ti sc instantiation scope fd tthis 'this' argument if !NULL fargs arguments to function Output: fd Partially instantiated function declaration ti.tdtypes Expression/Type deduced template arguments
Limited function template instantiation for using fd.leastAsSpecialized()
Check to see if constraint is satisfied.
Given a new instance tithis of this TemplateDeclaration, see if there already exists an instance. If so, return that existing instance.
Destructively get the error message from the last constraint evaluation
We can overload templates.
Check if the last template parameter is a tuple one, and returns it if so, else returns null.
Determine partial specialization order of 'this' vs td2.
Given that ti is an instance of this TemplateDeclaration, deduce the types of the parameters to this, and store those deduced types in dedtypes[]. Input: flag 1: don't do semantic() because of dummy types 2: don't change types in matchArg() Output: dedtypes deduced arguments Return match level.
Overload existing TemplateDeclaration 'this' with the new one 's'. Return true if successful; i.e. no conflict.
Remove TemplateInstance from table of instances. Input: handle returned by addInstance()
Create a scope for the parameters of the TemplateInstance ti in the parent scope sc from the ScopeDsymbol paramsym.
Similar to toChars, but does not print the template constraints
This function is #1 on the list of functions that eat cpu time. Be very, very careful about slowing it down.
Look for member of the form: const(MemberInfo)[] getMembers(string); Returns NULL if not found
Look up identifier in symbol table.
Return true if any of the members are static ctors or static dtors, or if any members have members that are.
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.
mixin template Identifier (parameters) Constraint https://dlang.org/spec/template.html
https://dlang.org/spec/template-mixin.html