2022-11-20 05:07:22 +00:00
|
|
|
#ifndef COMPILER_CTEMPLATETOOLS_H
|
|
|
|
#define COMPILER_CTEMPLATETOOLS_H
|
|
|
|
|
|
|
|
#include "compiler/common.h"
|
2022-12-29 12:32:55 +00:00
|
|
|
#include "compiler/enode.h"
|
|
|
|
|
|
|
|
extern short ctempl_instdepth;
|
|
|
|
|
|
|
|
extern void CTemplTool_PushInstance(TemplStack *stack, TypeClass *tmclass, Object *func);
|
|
|
|
extern void CTemplTool_PopInstance(TemplStack *stack);
|
|
|
|
extern ENode *CTempTool_GetPTMTemplArgExpr(ENode *expr, Type *type);
|
|
|
|
extern Boolean CTemplTool_InitDeduceInfo(DeduceInfo *info, TemplParam *params, TemplArg *args, Boolean flag);
|
|
|
|
extern void CTemplTool_InsertTemplateParameter(NameSpace *nspace, TemplParam *param);
|
|
|
|
extern TemplArg *CTemplTool_MakeTemplArgList(DeduceInfo *info);
|
|
|
|
extern Boolean CTemplTool_IsIdenticalTemplArgList(TemplArg *args, TemplParam *params);
|
|
|
|
extern Type *CTemplTool_GetSelfRefTemplate(Type *type);
|
|
|
|
extern TemplateFunction *CTemplTool_GetFuncTempl(Object *object);
|
|
|
|
extern Boolean CTemplTool_ParamHasDefaultArg(TemplParam *param);
|
|
|
|
extern void CTemplTool_MergeDefaultArgs(TemplParam *dest, TemplParam *src);
|
|
|
|
extern void CTemplTool_MergeArgNames(TypeFunc *src, TypeFunc *dest);
|
|
|
|
extern Boolean CTemplTool_EqualParams(TemplParam *a, TemplParam *b, Boolean copyNames);
|
|
|
|
extern NameSpace *CTemplTool_SetupTemplateArgumentNameSpace(TemplParam *params, TemplArg *args, Boolean is_global);
|
|
|
|
extern void CTemplTool_SetupOuterTemplateArgumentNameSpace(NameSpace *nspace);
|
|
|
|
extern NameSpace *CTemplTool_InsertTemplateArgumentNameSpace(TemplParam *params, TemplClassInst *inst, CScopeSave *save);
|
|
|
|
extern void CTemplTool_RemoveOuterTemplateArgumentNameSpace(NameSpace *nspace);
|
|
|
|
extern void CTemplTool_RemoveTemplateArgumentNameSpace(NameSpace *nspace, TemplClassInst *inst, CScopeSave *save);
|
|
|
|
extern Boolean CTemplTool_IsTemplateArgumentDependentType(Type *type);
|
|
|
|
extern Boolean CTemplTool_IsTemplateArgumentDependentExpression(ENode *expr);
|
|
|
|
extern Boolean CTemplTool_IsSameTemplate(TemplParam *params, TemplArg *args);
|
|
|
|
extern TemplClass *CTemplTool_IsTemplate(TypeTemplDep *ttd);
|
|
|
|
extern Type *CTemplTool_IsDependentTemplate(TemplClass *tmclass, TemplArg *args);
|
|
|
|
extern Boolean CTemplTool_EqualExprTypes(ENode *a, ENode *b);
|
|
|
|
extern ENode *CTempl_MakeTemplDepExpr(ENode *left, ENodeType nt, ENode *right);
|
|
|
|
extern void CTemplTool_CheckTemplArgType(Type *type);
|
|
|
|
extern Boolean CTemplTool_EqualArgs(TemplArg *a, TemplArg *b);
|
|
|
|
extern TemplArg *CTemplTool_MakeGlobalTemplArgCopy(TemplArg *args);
|
|
|
|
extern Boolean CTemplTool_TemplDepTypeCompare(TypeTemplDep *a, TypeTemplDep *b);
|
|
|
|
extern Type *CTemplTool_DeduceArgDepType(TemplArg *args, Type *type, UInt32 qual, UInt32 *resultQual);
|
|
|
|
extern ENode *CTemplTool_DeduceExpr(TypeDeduce *deduce, ENode *expr);
|
|
|
|
extern ENode *CTemplTool_DeduceDefaultArg(Object *func, ENode *expr);
|
|
|
|
extern FuncArg *CTemplTool_DeduceArgCopy(TypeDeduce *deduce, FuncArg *args);
|
|
|
|
extern Type *CTemplTool_DeduceTypeCopy(TypeDeduce *deduce, Type *type, UInt32 *resultQual);
|
|
|
|
extern Type *CTemplTool_ResolveMemberSelfRefs(TemplClass *templ, Type *type, UInt32 *resultQual);
|
|
|
|
extern Boolean CTemplTool_IsSameTemplateType(Type *a, Type *b);
|
2022-11-20 05:07:22 +00:00
|
|
|
|
|
|
|
#endif
|