Synopsis - Cross-Reference

File: /Synopsis/Parsers/Cxx/Types.cc
  1//
  2// Copyright (C) 2002 Stephen Davies
  3// Copyright (C) 2002 Stefan Seefeld
  4// All rights reserved.
  5// Licensed to the public under the terms of the GNU LGPL (>= 2),
  6// see the file COPYING for details.
  7//
  8
  9#include "Types.hh"
 10
 11using namespace Types;
 12
 13//
 14// Class Types::Type
 15//
 16
 17Type::Type()
 18{}
 19Type::~Type()
 20{}
 21
 22void
 23Type::accept(Visitor* visitor)
 24{
 25    visitor->visit_type(this);
 26}
 27
 28//
 29// Class Types::Named
 30//
 31
 32Named::Named(const ScopedName& n)
 33        : m_name(n)
 34{}
 35
 36Named::~Named()
 37{}
 38
 39void Named::accept(Visitor* visitor)
 40{
 41    visitor->visit_named(this);
 42}
 43
 44//
 45// Class Types::Base
 46//
 47
 48Base::Base(const ScopedName& n)
 49        : Named(n)
 50{}
 51
 52
 53void
 54Base::accept(Visitor* visitor)
 55{
 56    visitor->visit_base(this);
 57}
 58
 59//
 60// Class Types::Unknown
 61//
 62
 63Unknown::Unknown(const ScopedName& n)
 64        : Named(n)
 65{}
 66
 67
 68void
 69Unknown::accept(Visitor* visitor)
 70{
 71    visitor->visit_unknown(this);
 72}
 73
 74//
 75// Class Types::Dependent
 76//
 77
 78Dependent::Dependent(const ScopedName& n)
 79        : Named(n)
 80{}
 81
 82void
 83Dependent::accept(Visitor* visitor)
 84{
 85    visitor->visit_dependent(this);
 86}
 87
 88//
 89// Class Types::Declared
 90//
 91
 92Declared::Declared(const ScopedName& n, ASG::Declaration* decl)
 93        : Named(n), m_decl(decl)
 94{}
 95
 96
 97void
 98Declared::accept(Visitor* visitor)
 99{
100    visitor->visit_declared(this);
101}
102
103//
104// Class Types::Template
105//
106
107Template::Template(const ScopedName& n, ASG::Declaration* decl, const param_vector& params)
108        : Declared(n, decl), m_params(params)
109{}
110
111
112void
113Template::accept(Visitor* visitor)
114{
115    visitor->visit_template_type(this);
116}
117
118//
119// Class Types::Modifier
120//
121
122Modifier::Modifier(Type* alias, const Mods& pre, const Mods& post)
123        : m_alias(alias), m_pre(pre), m_post(post)
124{}
125
126Modifier::~Modifier()
127{}
128
129void
130Modifier::accept(Visitor* visitor)
131{
132    visitor->visit_modifier(this);
133}
134
135//
136// Class Types::Array
137//
138
139Array::Array(Type* alias, const Mods& sizes) : m_alias(alias), m_sizes(sizes)
140{}
141
142Array::~Array()
143{}
144
145void
146Array::accept(Visitor* visitor)
147{
148    visitor->visit_array(this);
149}
150
151//
152// Class Types::Parameterized
153//
154
155Parameterized::Parameterized(Named* t, const Type::vector& params)
156        : m_template(t), m_params(params)
157{}
158
159Parameterized::~Parameterized()
160{}
161
162void
163Parameterized::accept(Visitor* visitor)
164{
165    visitor->visit_parameterized(this);
166}
167
168//
169// Class Types::FuncPtr
170//
171
172FuncPtr::FuncPtr(Type::Type* ret, const Mods& premods, const Type::vector& params)
173        : m_return(ret), m_premod(premods), m_params(params)
174{}
175
176FuncPtr::~FuncPtr()
177{}
178
179void
180FuncPtr::accept(Visitor* visitor)
181{
182    visitor->visit_func_ptr(this);
183}
184
185//
186// Type::Visitor
187//
188
189Visitor::~Visitor()
190{}
191void Visitor::visit_type(Type*)
192{}
193void Visitor::visit_unknown(Unknown* t)
194{
195    visit_type(t);
196}
197void Visitor::visit_base(Base* t)
198{
199    visit_named(t);
200}
201void Visitor::visit_dependent(Dependent* t)
202{
203    visit_named(t);
204}
205void Visitor::visit_declared(Declared* t)
206{
207    visit_named(t);
208}
209void Visitor::visit_modifier(Modifier* t)
210{
211    visit_type(t);
212}
213void Visitor::visit_array(Array* t)
214{
215    visit_type(t);
216}
217void Visitor::visit_named(Named* t)
218{
219    visit_type(t);
220}
221void Visitor::visit_template_type(Template* t)
222{
223    visit_declared(t);
224}
225void Visitor::visit_parameterized(Parameterized* t)
226{
227    visit_type(t);
228}
229void Visitor::visit_func_ptr(FuncPtr* t)
230{
231    visit_type(t);
232}
233
234// exception wrong_type_cast
235const char* wrong_type_cast::what() const throw()
236{
237    return "Type::wrong_type_cast";
238}
239// vim: set ts=8 sts=4 sw=4 et: