14 using SubstitutionMap = std::unordered_map<std::string, Type>;
16 static std::unique_ptr<FuncDefAST>
19 const SubstitutionMap &bindings);
21 static std::unique_ptr<EnumDefAST>
24 const SubstitutionMap &bindings);
27 const SubstitutionMap &bindings;
28 explicit Monomorphizer(
const SubstitutionMap &bindings)
29 : bindings(bindings) {}
31 std::unique_ptr<TypeExprAST> clone_type_expr(
TypeExprAST *expr);
32 std::unique_ptr<TypedVarAST> clone_typed_var(
TypedVarAST *var);
33 std::unique_ptr<PrototypeAST>
36 std::unique_ptr<BlockAST> clone_block(
BlockAST *block);
37 std::unique_ptr<ExprAST> clone_expr(
ExprAST *expr);
38 std::vector<std::unique_ptr<ExprAST>>
39 clone_expr_vec(
const std::vector<std::unique_ptr<ExprAST>> &exprs);
42 std::string resolve_type_name(
const std::string &name)
const;