I believe to have implemented functions... also got the operator precedence the wrong...
[frith-skrift.git] / symbol.cpp
blobe08d7542c63968c7f5c6effd3a81f165723476d9
1 #include <frith/symbol_tree_node.hpp>
2 #include <boost/foreach.hpp>
4 namespace frith
6 symbol_tree_node::symbol_tree_node():
7 parent(0)
11 symbol_tree_node::symbol_tree_node(symbol::type type):
12 type(type),
13 parent(0)
15 switch(type)
17 case variable::variable:
18 variable_pointer = new variable;
19 break;
21 case variable::function:
22 function_pointer = new function;
23 break;
25 case variable::class_symbol:
26 class_pointer = new class_type;
27 break;
31 symbol_tree_node::~symbol_tree_node()
33 BOOST_FOREACH(symbol_tree_node * i, children)
34 delete i;
36 switch(type)
38 case variable::variable:
39 delete variable_pointer;
40 break;
42 case variable::function:
43 delete function_pointer;
44 break;
46 case variable::class_symbol:
47 delete class_pointer;
48 break;
50 case variable::module:
51 delete module_pointer;
52 break;
56 bool symbol_tree_node::exists(std::string const & name)
58 node_children::iterator iterator = children.find(name);
59 return iterator != children.end();
62 bool symbol_tree_node::find_entity(std::string const & name, symbol_tree_node * & output)
64 node_children::iterator iterator = children.find(name);
65 if(iterator == children.end())
67 if(parent == 0)
68 return false;
69 return parent->find_entity(name, output);
72 output = &iterator->second;
73 return true;