Changed the FNV include path
[fridhskrift.git] / interpreter / unit.cpp
blob1d41c1e5ce9f366fcc2f70d2a8ccf8beeeb9c116
1 #include <fridh/symbol.hpp>
3 namespace fridh
5 executable_unit::executable_unit():
6 type(executable_unit_type::uninitialised)
10 executable_unit::executable_unit(executable_unit const & other)
12 copy(other);
15 executable_unit::~executable_unit()
17 destroy();
20 executable_unit & executable_unit::operator=(executable_unit const & other)
22 destroy();
23 copy(other);
24 return *this;
27 void executable_unit::copy(executable_unit const & other)
29 #define COPY_MEMBER(type, member_type, member) \
30 case executable_unit_type::type: \
31 member = new member_type(*other.member); \
32 break;
34 type = other.type;
36 switch(other.type)
38 COPY_MEMBER(statement, parse_tree_node, statement_pointer)
39 COPY_MEMBER(return_statement, parse_tree_node, statement_pointer)
40 COPY_MEMBER(if_statement, if_statement, if_pointer)
41 COPY_MEMBER(if_else_statement, if_else_statement, if_else_pointer)
42 COPY_MEMBER(for_each_statement, for_each_statement, for_each_pointer)
43 COPY_MEMBER(for_statement, for_statement, for_pointer)
44 COPY_MEMBER(while_statement, while_statement, while_pointer)
47 #undef COPY_MEMBER
51 void executable_unit::destroy()
54 #define DELETE_MEMBER(type, member) \
55 case executable_unit_type::type: \
56 delete member; \
57 break;
59 switch(type)
61 DELETE_MEMBER(statement, statement_pointer)
62 DELETE_MEMBER(return_statement, statement_pointer)
63 DELETE_MEMBER(if_statement, if_pointer)
64 DELETE_MEMBER(if_else_statement, if_else_pointer)
65 DELETE_MEMBER(for_each_statement, for_each_pointer)
66 DELETE_MEMBER(for_statement, for_pointer)
67 DELETE_MEMBER(while_statement, while_pointer)
70 #undef DELETE_MEMBER