blob: d153ef44d4e5fa06cf49f0950422375283cc87e1 (
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
/**
** \file object/libobject.hh
** \brief Declare functions and variables exported by object module.
*/
#pragma once
#include <ast/fwd.hh>
#include <misc/error.hh>
#include <object/fwd.hh>
namespace object
{
/*-------.
| Bind. |
`-------*/
// FIXME DONE: Some code was deleted here.
/// \brief Bind the whole ast_object in place, return the error code
///
/// \param last the ast you want to bind
///
/// \return a misc::error that serve to indicate possible failure
misc::error bind_obj(ast::ChunkList* last);
/*----------------.
| Compute types. |
`----------------*/
/** \brief Check types allowing objects.
\param tree abstract syntax tree's root.
\return success of the type-checking. */
misc::error types_check(ast::Ast& tree);
/*---------.
| Rename. |
`---------*/
/// Rename the variables of an AST so that they each have a unique
/// name, with support for objects.
///
/// \param tree abstract syntax tree's root, whose bindings and types
/// have been computed.
/// \return a newly allocated dictionnary of class names
class_names_type* rename(ast::Ast& tree);
/*------------------.
| Desugar objects. |
`------------------*/
/** \brief Remove objects constructs from an AST.
\param tree abstract syntax tree's root, whose bindings
and types have been computed, and whose
identifiers are all unique.
\param class_names the names of the class types of the AST
\return the desugared, bound and type-checked AST. */
template <typename A>
A* desugar(const A& tree, const class_names_type& class_names);
/** \brief Remove objects constructs from an AST without recomputing
its bindings nor its types.
This function acts like object::object_desugar, but stops just
after the desugaring step (in fact, object::desugar is built
upon this function). It is meant to be used as a test of
DesugarVisitor (i.e., even if the desugared tree is badly bound
or typed, it can still be pretty-printed).
\param tree AST to desugar.
\param class_names the names of the class types of the AST
\return the desugared AST. */
template <typename A>
A* raw_desugar(const A& tree, const class_names_type& class_names);
} // namespace object
#include <object/libobject.hxx>
|