cprover
cpp_declarator_converter.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: C++ Language Type Checking
4 
5 Author: Daniel Kroening, kroening@cs.cmu.edu
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_CPP_CPP_DECLARATOR_CONVERTER_H
13 #define CPROVER_CPP_CPP_DECLARATOR_CONVERTER_H
14 
15 #include <util/symbol.h>
16 
17 #include "cpp_declarator.h"
18 #include "cpp_declaration.h"
19 #include "cpp_scope.h"
20 
21 // converts a cpp_declator plus some
22 // additional information stored in the class
23 // into a symbol
24 
26 {
27 public:
29  class cpp_typecheckt &_cpp_typecheck);
30 
31  bool is_typedef;
34  bool is_friend;
36 
38  const typet &type, // already typechecked
39  const cpp_storage_spect &storage_spec,
40  const cpp_member_spect &member_spec,
41  cpp_declaratort &declarator);
42 
44  const cpp_declarationt &declaration,
45  cpp_declaratort &declarator)
46  {
47  return convert(
48  declaration.type(),
49  declaration.storage_spec(),
50  declaration.member_spec(),
51  declarator);
52  }
53 
55 
56 protected:
61  bool is_code;
62 
63  void get_final_identifier();
65 
67  const cpp_storage_spect &storage_spec,
68  const cpp_member_spect &member_spec,
69  cpp_declaratort &declarator);
70 
71  void handle_initializer(
72  symbolt &symbol,
73  cpp_declaratort &declarator);
74 
75  void operator_overloading_rules(const symbolt &symbol);
76  void main_function_rules(const symbolt &symbol);
77 
78  void enforce_rules(const symbolt &symbol);
79 
81  typet &type,
82  bool force_constant);
83 
84  bool is_code_type(const typet &type) const
85  {
86  return type.id()==ID_code ||
87  (type.id()==ID_template && type.subtype().id()==ID_code);
88  }
89 
90  void combine_types(
91  const source_locationt &source_location,
92  const typet &decl_type,
93  symbolt &symbol);
94 };
95 
96 #endif // CPROVER_CPP_CPP_DECLARATOR_CONVERTER_H
cpp_declarator_convertert::final_type
typet final_type
Definition: cpp_declarator_converter.h:58
cpp_declarator_convertert::is_template
bool is_template
Definition: cpp_declarator_converter.h:32
dstringt
dstringt has one field, an unsigned integer no which is an index into a static table of strings.
Definition: dstring.h:37
cpp_declarationt::storage_spec
const cpp_storage_spect & storage_spec() const
Definition: cpp_declaration.h:74
cpp_storage_spect
Definition: cpp_storage_spec.h:16
typet::subtype
const typet & subtype() const
Definition: type.h:47
cpp_scope.h
C++ Language Type Checking.
cpp_declarator_convertert::operator_overloading_rules
void operator_overloading_rules(const symbolt &symbol)
Definition: cpp_declarator_converter.cpp:593
cpp_scopet
Definition: cpp_scope.h:21
typet
The type of an expression, extends irept.
Definition: type.h:29
cpp_declarator_convertert::main_function_rules
void main_function_rules(const symbolt &symbol)
Definition: cpp_declarator_converter.cpp:598
cpp_declaration.h
C++ Language Type Checking.
cpp_declarator_convertert::convert
symbolt & convert(const typet &type, const cpp_storage_spect &storage_spec, const cpp_member_spect &member_spec, cpp_declaratort &declarator)
Definition: cpp_declarator_converter.cpp:34
cpp_declarator_convertert::get_final_identifier
void get_final_identifier()
Definition: cpp_declarator_converter.cpp:394
cpp_declarationt::member_spec
const cpp_member_spect & member_spec() const
Definition: cpp_declaration.h:86
exprt::type
typet & type()
Return the type of the expression.
Definition: expr.h:81
cpp_declarator_convertert::is_code_type
bool is_code_type(const typet &type) const
Definition: cpp_declarator_converter.h:84
cpp_declarator_convertert
Definition: cpp_declarator_converter.h:26
cpp_declarator_convertert::is_friend
bool is_friend
Definition: cpp_declarator_converter.h:34
cpp_declarator_convertert::is_typedef
bool is_typedef
Definition: cpp_declarator_converter.h:31
cpp_declarator_convertert::get_pretty_name
irep_idt get_pretty_name()
Definition: cpp_declarator_converter.cpp:566
cpp_declarator_convertert::is_template_parameter
bool is_template_parameter
Definition: cpp_declarator_converter.h:33
cpp_typecheckt
Definition: cpp_typecheck.h:45
cpp_declarationt
Definition: cpp_declaration.h:24
symbol.h
Symbol table entry.
irept::id
const irep_idt & id() const
Definition: irep.h:418
cpp_declarator_convertert::convert_new_symbol
symbolt & convert_new_symbol(const cpp_storage_spect &storage_spec, const cpp_member_spect &member_spec, cpp_declaratort &declarator)
Definition: cpp_declarator_converter.cpp:436
cpp_declarator.h
C++ Language Type Checking.
source_locationt
Definition: source_location.h:20
cpp_declarator_convertert::handle_initializer
void handle_initializer(symbolt &symbol, cpp_declaratort &declarator)
Definition: cpp_declarator_converter.cpp:342
cpp_declarator_convertert::base_name
irep_idt base_name
Definition: cpp_declarator_converter.h:57
symbolt
Symbol table entry.
Definition: symbol.h:28
cpp_declarator_convertert::enforce_rules
void enforce_rules(const symbolt &symbol)
Definition: cpp_declarator_converter.cpp:333
cpp_declarator_convertert::combine_types
void combine_types(const source_locationt &source_location, const typet &decl_type, symbolt &symbol)
Definition: cpp_declarator_converter.cpp:254
cpp_declarator_convertert::linkage_spec
irep_idt linkage_spec
Definition: cpp_declarator_converter.h:35
cpp_declarator_convertert::final_identifier
irep_idt final_identifier
Definition: cpp_declarator_converter.h:60
cpp_declarator_convertert::is_code
bool is_code
Definition: cpp_declarator_converter.h:61
cpp_declarator_convertert::cpp_declarator_convertert
cpp_declarator_convertert(class cpp_typecheckt &_cpp_typecheck)
Definition: cpp_declarator_converter.cpp:22
cpp_member_spect
Definition: cpp_member_spec.h:17
cpp_declarator_convertert::check_array_types
void check_array_types(typet &type, bool force_constant)
cpp_declaratort
Definition: cpp_declarator.h:20
cpp_declarator_convertert::cpp_typecheck
class cpp_typecheckt & cpp_typecheck
Definition: cpp_declarator_converter.h:54
cpp_declarator_convertert::scope
cpp_scopet * scope
Definition: cpp_declarator_converter.h:59
cpp_declarator_convertert::convert
symbolt & convert(const cpp_declarationt &declaration, cpp_declaratort &declarator)
Definition: cpp_declarator_converter.h:43