Sync with 5.4.2
[deliverable/titan.core.git] / compiler2 / EnumItem.cc
1 ///////////////////////////////////////////////////////////////////////////////
2 // Copyright (c) 2000-2015 Ericsson Telecom AB
3 // All rights reserved. This program and the accompanying materials
4 // are made available under the terms of the Eclipse Public License v1.0
5 // which accompanies this distribution, and is available at
6 // http://www.eclipse.org/legal/epl-v10.html
7 ///////////////////////////////////////////////////////////////////////////////
8 #include "EnumItem.hh"
9 #include "Value.hh"
10
11 namespace Common {
12
13 // =================================
14 // ===== EnumItem
15 // =================================
16
17 EnumItem::EnumItem(Identifier *p_name, Value *p_value)
18 : Node(), Location(), name(p_name), value(p_value)
19 {
20 if (!p_name) FATAL_ERROR("NULL parameter: Common::EnumItem::EnumItem()");
21 }
22
23 EnumItem::EnumItem(const EnumItem& p)
24 : Node(p), Location(p)
25 {
26 name=p.name->clone();
27 value=p.value?p.value->clone():0;
28 }
29
30 EnumItem::~EnumItem()
31 {
32 delete name;
33 delete value;
34 }
35
36 EnumItem *EnumItem::clone() const
37 {
38 return new EnumItem(*this);
39 }
40
41 void EnumItem::set_fullname(const string& p_fullname)
42 {
43 Node::set_fullname(p_fullname);
44 if(value) value->set_fullname(p_fullname);
45 }
46
47 void EnumItem::set_my_scope(Scope *p_scope)
48 {
49 if(value) value->set_my_scope(p_scope);
50 }
51
52 void EnumItem::set_value(Value *p_value)
53 {
54 if(!p_value) FATAL_ERROR("NULL parameter: Common::EnumItem::set_value()");
55 if(value) FATAL_ERROR("Common::EnumItem::set_value()");
56 value=p_value;
57 }
58
59 void EnumItem::set_text(const string& p_text)
60 {
61 text = p_text;
62 }
63
64 void EnumItem::dump(unsigned level) const
65 {
66 name->dump(level);
67 if(value) {
68 DEBUG(level, "with value:");
69 value->dump(level+1);
70 }
71 }
72
73 // =================================
74 // ===== EnumItems
75 // =================================
76
77 EnumItems::EnumItems(const EnumItems& p)
78 : Node(p), my_scope(0)
79 {
80 for (size_t i = 0; i < p.eis_v.size(); i++) add_ei(p.eis_v[i]->clone());
81 }
82
83 EnumItems::~EnumItems()
84 {
85 for(size_t i = 0; i < eis_v.size(); i++) delete eis_v[i];
86 eis_v.clear();
87 eis_m.clear();
88 }
89
90 void EnumItems::release_eis()
91 {
92 eis_v.clear();
93 eis_m.clear();
94 }
95
96 EnumItems* EnumItems::clone() const
97 {
98 return new EnumItems(*this);
99 }
100
101 void EnumItems::set_fullname(const string& p_fullname)
102 {
103 Node::set_fullname(p_fullname);
104 for (size_t i = 0; i < eis_v.size(); i++) {
105 EnumItem *ei = eis_v[i];
106 ei->set_fullname(p_fullname + "." + ei->get_name().get_dispname());
107 }
108 }
109
110 void EnumItems::set_my_scope(Scope *p_scope)
111 {
112 my_scope = p_scope;
113 for(size_t i = 0; i < eis_v.size(); i++)
114 eis_v[i]->set_my_scope(p_scope);
115 }
116
117 void EnumItems::add_ei(EnumItem *p_ei)
118 {
119 if(!p_ei)
120 FATAL_ERROR("NULL parameter: Common::EnumItems::add_ei()");
121 eis_v.add(p_ei);
122 const Identifier& id = p_ei->get_name();
123 const string& name = id.get_name();
124 if (!eis_m.has_key(name)) eis_m.add(name, p_ei);
125 p_ei->set_fullname(get_fullname()+"."+id.get_dispname());
126 p_ei->set_my_scope(my_scope);
127 }
128
129 void EnumItems::dump(unsigned level) const
130 {
131 for (size_t i = 0; i < eis_v.size(); i++) eis_v[i]->dump(level);
132 }
133
134 }
This page took 0.034818 seconds and 5 git commands to generate.