summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be_include/be_decl.h
blob: 14ff73abc961f135ae8079e909afa2b01e7464e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/* -*- c++ -*- */
// $Id$

// ============================================================================
//
// = LIBRARY
//    TAO IDL
//
// = FILENAME
//    be_decl.h
//
// = DESCRIPTION
//    Extension of the AST_Decl class.
//
// = AUTHOR
//    Copyright 1994-1995 by Sun Microsystems, Inc.
//    and
//    Aniruddha Gokhale
//
// ============================================================================

#ifndef TAO_BE_DECL_H
#define TAO_BE_DECL_H

#include "ast_decl.h"

class be_scope;
class be_visitor;
class be_type;

class be_decl : public virtual AST_Decl
{
  // = TITLE
  //    be_decl
  // = DESCRIPTION
  //    The back end extension of the AST_Decl class. Provides an abstract
  //    interface.
  //
public:
  be_decl (void);
  // Default constructor.

  be_decl (AST_Decl::NodeType type,
           UTL_ScopedName *n);
  // Constructor that sets the node type.

  ~be_decl (void);
  // Destructor.

  // Methods used by the interface type strategy.
  void compute_full_name  (const char *prefix,
                           const char *suffix,
                           char *&name);
  // Both the arguments should be non-null!!!. Applies prefix and
  // suffix to the local name and makes a flat name.

  void compute_flat_name (const char *prefix,
                          const char *suffix,
                          char *& name);
  // Both the arguments should be non-null!!!. Applies prefix and
  // suffix to the local name and makes a flat name.

  // End of Methods use by the interface type strategy.

  virtual be_scope *scope (void);
  // Return the scope created by this node (if one exists).

  // Visiting
  virtual int accept (be_visitor *visitor);

  virtual void destroy (void);
  // Cleanup function.

  // Boolean methods to test if code was already generated.
  idl_bool cli_hdr_gen (void);
  idl_bool cli_stub_gen (void);
  idl_bool cli_inline_gen (void);
  idl_bool srv_hdr_gen (void);
  idl_bool impl_hdr_gen (void);
  idl_bool srv_skel_gen (void);
  idl_bool impl_skel_gen (void);
  idl_bool srv_inline_gen (void);
  idl_bool cli_hdr_any_op_gen (void);
  idl_bool cli_stub_any_op_gen (void);
  idl_bool cli_hdr_cdr_op_gen (void);
  idl_bool cli_stub_cdr_op_gen (void);
  idl_bool cli_inline_cdr_op_gen (void);
  idl_bool cli_inline_cdr_decl_gen (void);

  idl_bool cli_traits_gen (void);
  idl_bool cli_arg_traits_gen (void);
  idl_bool srv_arg_traits_gen (void);
  idl_bool srv_sarg_traits_gen (void);
  idl_bool cli_tmpl_class_gen (void);
  idl_bool cli_pragma_inst_gen (void);
  idl_bool cli_inarg_tmpl_class_gen (void);
  idl_bool cli_inarg_pragma_inst_gen (void);
  idl_bool cli_inoutarg_tmpl_class_gen (void);
  idl_bool cli_inoutarg_pragma_inst_gen (void);
  idl_bool cli_outarg_tmpl_class_gen (void);
  idl_bool cli_outarg_pragma_inst_gen (void);
  idl_bool cli_retarg_tmpl_class_gen (void);
  idl_bool cli_retarg_pragma_inst_gen (void);
  idl_bool srv_tmpl_class_gen (void);
  idl_bool srv_pragma_inst_gen (void);
  idl_bool srv_inarg_tmpl_class_gen (void);
  idl_bool srv_inarg_pragma_inst_gen (void);
  idl_bool srv_inoutarg_tmpl_class_gen (void);
  idl_bool srv_inoutarg_pragma_inst_gen (void);
  idl_bool srv_outarg_tmpl_class_gen (void);
  idl_bool srv_outarg_pragma_inst_gen (void);
  idl_bool srv_retarg_tmpl_class_gen (void);
  idl_bool srv_retarg_pragma_inst_gen (void);

  // Set the flag indicating that code generation is done.
  void cli_hdr_gen (idl_bool);
  void cli_stub_gen (idl_bool);
  void cli_inline_gen (idl_bool);
  void srv_hdr_gen (idl_bool);
  void impl_hdr_gen (idl_bool);
  void srv_skel_gen (idl_bool);
  void impl_skel_gen (idl_bool);
  void srv_inline_gen (idl_bool);
  void cli_hdr_any_op_gen (idl_bool);
  void cli_stub_any_op_gen (idl_bool);
  void cli_hdr_cdr_op_gen (idl_bool);
  void cli_stub_cdr_op_gen (idl_bool);
  void cli_inline_cdr_op_gen (idl_bool);
  void cli_inline_cdr_decl_gen (idl_bool);

  void cli_traits_gen (idl_bool);
  void cli_arg_traits_gen (idl_bool);
  void srv_arg_traits_gen (idl_bool);
  void srv_sarg_traits_gen (idl_bool);
  void cli_tmpl_class_gen (idl_bool);
  void cli_pragma_inst_gen (idl_bool);
  void cli_inarg_tmpl_class_gen (idl_bool);
  void cli_inarg_pragma_inst_gen (idl_bool);
  void cli_inoutarg_tmpl_class_gen (idl_bool);
  void cli_inoutarg_pragma_inst_gen (idl_bool);
  void cli_outarg_tmpl_class_gen (idl_bool);
  void cli_outarg_pragma_inst_gen (idl_bool);
  void cli_retarg_tmpl_class_gen (idl_bool);
  void cli_retarg_pragma_inst_gen (idl_bool);
  void srv_tmpl_class_gen (idl_bool);
  void srv_pragma_inst_gen (idl_bool);
  void srv_inarg_tmpl_class_gen (idl_bool);
  void srv_inarg_pragma_inst_gen (idl_bool);
  void srv_inoutarg_tmpl_class_gen (idl_bool);
  void srv_inoutarg_pragma_inst_gen (idl_bool);
  void srv_outarg_tmpl_class_gen (idl_bool);
  void srv_outarg_pragma_inst_gen (idl_bool);
  void srv_retarg_tmpl_class_gen (idl_bool);
  void srv_retarg_pragma_inst_gen (idl_bool);

  // Narrowing
  DEF_NARROW_METHODS1 (be_decl, AST_Decl);
  DEF_NARROW_FROM_DECL (be_decl);

protected:
  // Called by be_operation (for the return type) and be_argument.
  void set_arg_seen_bit (be_type *);

private:
  // Variables that indicate if the code generation for that node is already
  // been done. This way we avoid regenerating same code.
  idl_bool cli_hdr_gen_;
  idl_bool cli_stub_gen_;
  idl_bool cli_inline_gen_;
  idl_bool srv_hdr_gen_;
  idl_bool impl_hdr_gen_;
  idl_bool srv_skel_gen_;
  idl_bool impl_skel_gen_;
  idl_bool srv_inline_gen_;
  idl_bool cli_hdr_any_op_gen_;
  idl_bool cli_stub_any_op_gen_;
  idl_bool cli_hdr_cdr_op_gen_;
  idl_bool cli_stub_cdr_op_gen_;
  idl_bool cli_inline_cdr_op_gen_;
  idl_bool cli_inline_cdr_decl_gen_;

  idl_bool cli_traits_gen_;
  idl_bool cli_arg_traits_gen_;
  idl_bool srv_arg_traits_gen_;
  idl_bool srv_sarg_traits_gen_;
  idl_bool cli_tmpl_class_gen_;
  idl_bool cli_pragma_inst_gen_;
  idl_bool cli_inarg_tmpl_class_gen_;
  idl_bool cli_inarg_pragma_inst_gen_;
  idl_bool cli_inoutarg_tmpl_class_gen_;
  idl_bool cli_inoutarg_pragma_inst_gen_;
  idl_bool cli_outarg_tmpl_class_gen_;
  idl_bool cli_outarg_pragma_inst_gen_;
  idl_bool cli_retarg_tmpl_class_gen_;
  idl_bool cli_retarg_pragma_inst_gen_;
  idl_bool srv_tmpl_class_gen_;
  idl_bool srv_pragma_inst_gen_;
  idl_bool srv_inarg_tmpl_class_gen_;
  idl_bool srv_inarg_pragma_inst_gen_;
  idl_bool srv_inoutarg_tmpl_class_gen_;
  idl_bool srv_inoutarg_pragma_inst_gen_;
  idl_bool srv_outarg_tmpl_class_gen_;
  idl_bool srv_outarg_pragma_inst_gen_;
  idl_bool srv_retarg_tmpl_class_gen_;
  idl_bool srv_retarg_pragma_inst_gen_;

};

#endif // if !defined