summaryrefslogtreecommitdiff
path: root/tiger-compiler/src/combine/libcombine.hh
blob: 66f3c4c13f0d4d6749a3e4f57e2d05dfde459c0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
 ** \file combine/libcombine.hh
 ** \brief Declare functions and variables exported by combine module.
 */

#pragma once

#include <ast/fwd.hh>
#include <misc/error.hh>
#include <overload/binder.hh>

namespace combine
{
  /*-------.
  | Bind.  |
  `-------*/

  /** \brief Bind identifier uses to their definition, allowing
      function overloading, and return a list of potential definition
      sites for each function call.

      \param tree AST to bind.

      \return a pair whose first element is the potential function
              bindings, and the second element the error status.  */
  std::pair<overload::overfun_bindings_type, misc::error>
  combine_bind(ast::Ast& tree, bool overloads_enabled);

  /*------------------------------.
  | Compute types with overload.  |
  `------------------------------*/

  /** \brief Check types allowing function overloading.

      \param tree             abstract syntax tree's root.
      \param combine_bindings potential function bindings.

      \return success of the type-checking.  */
  misc::error
  combine_types_check(ast::Ast& tree,
                      const overload::overfun_bindings_type& combine_bindings,
                      bool overloads_enabled);

} // namespace combine