CUBRID Engine  latest
esql_misc.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * esql_misc.h - Prototypes of all interesting inter-module definitions.
22  */
23 
24 #ifndef _ESQL_MISC_H_
25 #define _ESQL_MISC_H_
26 
27 #ident "$Id$"
28 
29 #include <limits.h>
30 #include "esql_host_variable.h"
31 #include "esql_hash.h"
32 #include "parser.h"
33 #include "variable_string.h"
34 
35 /* True iff the default size of an int is long. */
36 #define HOST_N_REFS(p) ((p) ? (p)->n_refs : 0)
37 #define HOST_REFS(p) ((p) ? (p)->refs : NULL)
38 #define HOST_DESC(p) ((p) ? (p)->desc : NULL)
39 #define CHECK_HOST_REF(hvars, n) \
40  ((hvars) && (n) < (hvars)->n_refs ? \
41  &(hvars)->refs[(n)] : NULL)
42 #define MEMBER(set, val) ((set) & (1 << (val)))
43 #define NEWSET(val) (1 << (val))
44 #define ECHO (*echo_fn)(esql_yytext, strlen(esql_yytext))
45 #define ECHO_STR(str,length) (*echo_fn)((str), length)
46 #define ECHO_SP ECHO_STR(" ",strlen(" "))
47 #define ECHO_NL ECHO_STR("\n",strlen("\n"))
48 
49 #define IS_SPECIFIER(p) ( (p)->class_ == SPECIFIER )
50 #define IS_DECLARATOR(p) ( (p)->class_ == DECLARATOR )
51 
52 #define IS_ARRAY(p) ( IS_DECLARATOR(p) && \
53  (p)->decl.d.dcl_type == D_ARRAY )
54 #define IS_POINTER(p) ( IS_DECLARATOR(p) && \
55  (p)->decl.d.dcl_type == D_POINTER)
56 #define IS_FUNCT(p) ( IS_DECLARATOR(p) && \
57  (p)->decl.d.dcl_type == D_FUNCTION)
58 #define IS_CHAR(p) ( IS_SPECIFIER(p) && (p)->decl.s.noun == N_CHR )
59 #define IS_INT(p) ( IS_SPECIFIER(p) && (p)->decl.s.noun == N_INT )
60 #define IS_UINT(p) ( IS_INT(p) && (p)->decl.s.is_unsigned )
61 #define IS_LONG(p) ( IS_INT(p) && (p)->decl.s.is_long )
62 #define IS_ULONG(p) ( IS_INT(p) && (p)->decl.s.is_long && \
63  (p)->decl.s.is_unsigned )
64 #define IS_UNSIGNED(p) ( (p)->decl.s.is_unsigned )
65 
66 #define IS_STRUCT(p) ( IS_SPECIFIER(p) && \
67  (p)->decl.s.noun == N_STRUCTURE )
68 #define IS_LABEL(p) ( IS_SPECIFIER(p) && \
69  (p)->decl.s.noun == N_LABEL )
70 #define IS_VARCHAR(p) ( IS_SPECIFIER(p) && \
71  (p)->decl.s.noun == N_VARCHAR )
72 #define IS_BIT(p) ( IS_SPECIFIER(p) && \
73  (p)->decl.s.noun == N_BIT )
74 #define IS_VARBIT(p) ( IS_SPECIFIER(p) && \
75  (p)->decl.s.noun == N_VARBIT )
76 #define IS_PSEUDO_TYPE(p) ( IS_SPECIFIER(p) && \
77  ((p)->decl.s.noun == N_VARCHAR || \
78  (p)->decl.s.noun == N_BIT || \
79  (p)->decl.s.noun == N_VARBIT) )
80 #define IS_VAR_TYPE(p) ( IS_SPECIFIER(p) && \
81  ((p)->decl.s.noun == N_VARCHAR || \
82  (p)->decl.s.noun == N_VARBIT) )
83 
84 #define IS_AGGREGATE(p) ( IS_ARRAY(p) || IS_STRUCT(p) )
85 #define IS_PTR_TYPE(p) ( IS_ARRAY(p) || IS_POINTER(p) )
86 
87 #define IS_TYPEDEF(p) ( IS_SPECIFIER(p) && \
88  (p)->decl.s.sclass == C_TYPEDEF )
89 #define IS_CONSTANT(p) ( IS_SPECIFIER(p) && \
90  (p)->decl.s.sclass == C_CONSTANT)
91 #define IS_INT_CONSTANT(p) ( IS_CONSTANT(p) && \
92  (p)->decl.s.noun == N_INT)
93 
94 typedef unsigned int BITSET;
95 typedef void (*ECHO_FN) (const char *, int);
98 
100 {
102  char *name;
103 };
104 
106 {
108 };
109 
110 enum ex_msg
111 {
126 };
127 
128 enum
129 {
131 };
132 
133 
135 {
138  C_MODE = 2,
140  VAR_MODE = 4,
141  HV_MODE = 5,
144 };
145 
146 
147 #ifdef __cplusplus
148 extern "C"
149 {
150 #endif
151 
152  extern int pp_recognizing_typedef_names;
153  extern int pp_nesting_level;
154 
155 
156  extern char *pt_buffer;
157  extern unsigned int pp_uci_opt;
158  extern int pp_emit_line_directives;
159  extern int pp_dump_scope_info;
160  extern int pp_dump_malloc_info;
161  extern const char *pp_include_path;
162  extern char *pp_include_file;
163  extern int pp_enable_uci_trace;
164  extern int pp_disable_varchar_length;
165  extern int pp_varchar2;
166  extern int pp_unsafe_null;
167  extern int pp_internal_ind;
168  extern const char *prog_name;
170 
172  extern varstring pp_host_var_buf;
173 
174  extern char *esql_yyfilename;
175  extern int errors;
176  extern ECHO_FN echo_fn;
177 
178 
179  extern const char *VARCHAR_ARRAY_NAME;
180  extern const char *VARCHAR_LENGTH_NAME;
181  extern SYMTAB *pp_Symbol_table; /* The table for C identifiers. */
182  extern SYMTAB *pp_Struct_table; /* The table for struct definitions */
183 
184  extern CURSOR *pp_new_cursor (char *name, char *static_stmt, int stmtLength, STMT * dynamic_stmt,
185  HOST_LOD * host_refs);
186  extern void pp_free_cursor (CURSOR * cursor);
187  extern CURSOR *pp_lookup_cursor (char *name);
188  extern void pp_cursor_init (void);
189  extern void pp_cursor_finish (void);
190  extern void pp_print_cursors (FILE * fp);
191  extern void pp_remove_cursors_from_table (CURSOR * chain);
192  extern void pp_discard_cursor_chain (CURSOR * chain);
193  extern STMT *pp_new_stmt (char *name);
194  extern void pp_free_stmt (STMT * stmt);
195  extern void pp_add_spec_to_decl (LINK * p_spec, SYMBOL * decl_chain);
196  extern void pp_add_symbols_to_table (SYMBOL * sym);
197  extern void pp_remove_symbols_from_table (SYMBOL * sym_chain);
198  extern void pp_do_enum (SYMBOL * sym);
199  extern void pp_push_name_scope (void);
200  extern void pp_pop_name_scope (void);
201  extern void pp_make_typedef_names_visible (int);
202  extern void pp_decl_init (void);
203  extern void pp_decl_finish (void);
204  extern void pp_reset_current_type_spec (void);
205  extern LINK *pp_current_type_spec (void);
206  extern void pp_add_storage_class (int sc);
207  extern void pp_add_struct_spec (STRUCTDEF * sdef);
208  extern void pp_add_type_noun (int type);
209  extern void pp_add_type_adj (int adj);
210  extern void pp_add_typedefed_spec (LINK * spec);
211  extern void pp_add_initializer (SYMBOL * sym);
212  extern void pp_push_spec_scope (void);
213  extern void pp_pop_spec_scope (void);
214  extern void pp_disallow_storage_classes (void);
215  extern void pp_add_cursor_to_scope (CURSOR * cursor);
216  extern void pp_add_whenever_to_scope (WHEN_CONDITION cond, WHEN_ACTION action, char *name);
217  extern void pp_print_decls (SYMBOL * sym_chain, int preechoed);
218  extern void pp_print_specs (LINK * link);
219  extern void pp_suppress_echo (int);
220  extern void pp_gather_input_refs (void);
221  extern void pp_gather_output_refs (void);
222  extern HOST_LOD *pp_input_refs (void);
223  extern HOST_LOD *pp_output_refs (void);
224  extern void pp_clear_host_refs (void);
225  extern HOST_VAR *pp_new_host_var (HOST_VAR * var, SYMBOL * sym);
226  extern void pp_free_host_var (HOST_VAR * var);
227  extern HOST_REF *pp_add_host_ref (HOST_VAR *, HOST_VAR *, bool, int *);
228  extern void pp_free_host_ref (HOST_REF * ref);
229  extern HOST_LOD *pp_copy_host_refs (void);
230  extern HOST_LOD *pp_detach_host_refs (void);
231  extern HOST_REF *pp_check_type (HOST_REF * ref, BITSET typeset, const char *msg);
232  extern void pp_check_host_var_list (void);
233  extern HOST_VAR *pp_ptr_deref (HOST_VAR * var, int style);
234  extern HOST_VAR *pp_struct_deref (HOST_VAR * var, char *field, int indirect);
235  extern HOST_VAR *pp_addr_of (HOST_VAR * var);
236  extern void pp_hv_init (void);
237  extern void pp_hv_finish (void);
238  extern HOST_REF *pp_add_host_str (char *str);
239  extern HOST_LOD *pp_new_host_lod (void);
240  extern void pp_free_host_lod (HOST_LOD * lod);
241  extern void pp_clear_host_lod (HOST_LOD * lod);
242  extern char *pp_switch_to_descriptor (void);
243  extern void pp_translate_string (varstring * vstr, const char *str, int in_string);
244  extern unsigned int pp_generic_case_hash (void *p);
245  extern unsigned int pp_generic_hash (void *p);
246  extern int pp_generic_case_cmp (void *p1, void *p2);
247  extern int pp_generic_cmp (void *p1, void *p2);
248  extern void pp_startup (void);
249  extern void pp_finish (void);
250  extern void *pp_malloc (int n);
251  extern char *pp_strdup (const char *str);
252  extern PTR_VEC *pp_new_ptr_vec (PTR_VEC * vec);
253  extern void pp_free_ptr_vec (PTR_VEC * vec);
254  extern PTR_VEC *pp_add_ptr (PTR_VEC * vec, void *new_elem);
255  extern int pp_ptr_vec_n_elems (PTR_VEC * vec);
256  extern void **pp_ptr_vec_elems (PTR_VEC * vec);
257  extern const char *pp_get_msg (int msg_set, int msg_num);
258  extern void emit_line_directive (void);
259  extern void esql_yyinit (void);
260  extern void esql_yyerror (const char *);
261  extern void esql_yyverror (const char *, ...);
262  extern void esql_yyvwarn (const char *, ...);
263  extern void esql_yyredef (char *);
264  extern void esql_yy_enter (enum scanner_mode);
265  extern void esql_yy_push_mode (enum scanner_mode);
266  extern void esql_yy_pop_mode (void);
267  extern void esql_yy_check_mode (void);
268  extern void esql_yy_sync_lineno (void);
269  extern void esql_yy_echo (const char *str);
270  extern void esql_yy_erase_last_token (void);
271  extern varstring *yy_get_buf ();
272  extern void echo_stream (const char *, int);
273  extern void echo_vstr (const char *, int);
274 #if defined (ENABLE_UNUSED_FUNCTION)
275  extern void echo_devnull (const char *, int);
276 #endif
277  extern ECHO_FN pp_set_echo (ECHO_FN);
278  extern SYMTAB *pp_new_symtab (void);
279  extern void pp_free_symtab (SYMTAB *, HT_FREE_FN);
280  extern SYMBOL *pp_new_symbol (const char *name, int scope);
281  extern void pp_discard_symbol (SYMBOL * sym);
282  extern void pp_discard_symbol_chain (SYMBOL * sym);
283  extern LINK *pp_new_link (void);
284  extern void pp_discard_link_chain (LINK * p);
285  extern void pp_discard_link (LINK * p);
286  extern STRUCTDEF *pp_new_structdef (const char *tag);
287  extern void pp_discard_structdef (STRUCTDEF * sdef);
288  extern void pp_discard_structdef_chain (STRUCTDEF * sdef);
289  extern STRUCTDEF *pp_new_pseudo_def (SPECIFIER_NOUN type, const char *subscript);
290  extern void pp_add_declarator (SYMBOL * sym, int type);
291  extern LINK *pp_clone_type (LINK * tchain, LINK ** endp);
292  extern SYMBOL *pp_clone_symbol (SYMBOL * sym);
293  extern int pp_the_same_type (LINK * p1, LINK * p2, int relax);
294  extern char *pp_sclass_str (int class_);
295  extern char *pp_attr_str (LINK * type);
296  extern const char *pp_type_str (LINK * link);
297  extern void pp_print_syms (FILE * fp);
298  extern SYMBOL *pp_findsym (SYMTAB * symtab, unsigned char *name);
299  extern void pp_symbol_init (void);
300  extern void pp_symbol_finish (void);
301  extern void pp_symbol_stats (FILE * fp);
302  extern void pp_init_whenever_scope (WHENEVER_SCOPE * scope, WHENEVER_SCOPE * old_scope);
303  extern void pp_finish_whenever_scope (WHENEVER_SCOPE * scope, WHENEVER_SCOPE * new_scope);
305 
306 #ifdef __cplusplus
307 }
308 #endif
309 
310 #endif /* _ESQL_MISC_H_ */
unsigned int pp_generic_case_hash(void *p)
Definition: esql_misc.c:70
void pp_add_initializer(SYMBOL *sym)
void pp_remove_symbols_from_table(SYMBOL *sym_chain)
Definition: esql_declare.c:361
int pp_ptr_vec_n_elems(PTR_VEC *vec)
Definition: esql_misc.c:316
void pp_add_whenever_to_scope(WHEN_CONDITION cond, WHEN_ACTION action, char *name)
SYMBOL * pp_findsym(SYMTAB *symtab, unsigned char *name)
void esql_yyvwarn(const char *,...)
void pp_clear_host_lod(HOST_LOD *lod)
const char * prog_name
void pp_add_type_adj(int adj)
Definition: esql_declare.c:857
SYMBOL * pp_new_symbol(const char *name, int scope)
int pp_varchar2
PTR_VEC * pp_new_ptr_vec(PTR_VEC *vec)
Definition: esql_misc.c:197
HOST_VAR * pp_new_host_var(HOST_VAR *var, SYMBOL *sym)
HOST_LOD * pp_output_refs(void)
void pp_symbol_init(void)
SYMTAB * pp_Struct_table
void pp_hv_init(void)
void * pp_malloc(int n)
Definition: esql_misc.c:353
LINK * pp_clone_type(LINK *tchain, LINK **endp)
void pp_suppress_echo(int)
CURSOR * pp_new_cursor(char *name, char *static_stmt, int stmtLength, STMT *dynamic_stmt, HOST_LOD *host_refs)
Definition: esql_cursor.c:56
void esql_yy_enter(enum scanner_mode)
void pp_print_syms(FILE *fp)
HOST_LOD * pp_detach_host_refs(void)
char * pp_switch_to_descriptor(void)
void pp_free_symtab(SYMTAB *, HT_FREE_FN)
void echo_stream(const char *, int)
void esql_yyverror(const char *,...)
CURSOR * pp_lookup_cursor(char *name)
Definition: esql_cursor.c:118
void pp_cursor_finish(void)
Definition: esql_cursor.c:143
unsigned int pp_generic_hash(void *p)
Definition: esql_misc.c:99
void pp_print_cursors(FILE *fp)
Definition: esql_cursor.c:199
const char * pp_get_msg(int msg_set, int msg_num)
void pp_finish_whenever_scope(WHENEVER_SCOPE *scope, WHENEVER_SCOPE *new_scope)
Definition: esql_whenever.c:89
void pp_free_stmt(STMT *stmt)
Definition: esql_cursor.c:292
char * pt_buffer
int pp_generic_case_cmp(void *p1, void *p2)
Definition: esql_misc.c:115
void esql_yy_check_mode(void)
const char * pp_type_str(LINK *link)
void pp_startup(void)
Definition: esql_misc.c:145
int pp_generic_cmp(void *p1, void *p2)
Definition: esql_misc.c:132
HOST_LOD * pp_input_refs(void)
void pp_add_struct_spec(STRUCTDEF *sdef)
Definition: esql_declare.c:707
void esql_yyinit(void)
int pp_unsafe_null
void(* HT_FREE_FN)(void *)
Definition: esql_hash.h:31
void pp_push_name_scope(void)
Definition: esql_declare.c:418
void pp_print_specs(LINK *link)
void pp_symbol_finish(void)
int pp_nesting_level
Definition: esql_declare.c:114
int pp_recognizing_typedef_names
Definition: esql_declare.c:113
void pp_decl_init(void)
Definition: esql_declare.c:530
void esql_yyerror(const char *)
void pp_hv_finish(void)
void esql_yy_erase_last_token(void)
enum when_action WHEN_ACTION
void pp_symbol_stats(FILE *fp)
int pp_emit_line_directives
int errors
void pp_add_type_noun(int type)
Definition: esql_declare.c:754
void pp_check_host_var_list(void)
void pp_gather_input_refs(void)
unsigned int BITSET
Definition: esql_misc.h:94
HOST_LOD * pp_copy_host_refs(void)
void pp_add_typedefed_spec(LINK *spec)
Definition: esql_declare.c:995
STMT * pp_new_stmt(char *name)
Definition: esql_cursor.c:261
enum specifier_noun SPECIFIER_NOUN
void pp_translate_string(varstring *vstr, const char *str, int in_string)
const char * VARCHAR_ARRAY_NAME
static HOST_LOD * input_refs
Definition: esql_misc.h:304
HOST_LOD * pp_new_host_lod(void)
WHEN_ACTION action
Definition: esql_misc.h:101
void pp_discard_link(LINK *p)
void pp_do_enum(SYMBOL *sym)
Definition: esql_declare.c:397
void pp_add_declarator(SYMBOL *sym, int type)
HOST_REF * pp_add_host_ref(HOST_VAR *, HOST_VAR *, bool, int *)
const char * pp_include_path
char * esql_yyfilename
char * pp_sclass_str(int class_)
void ** pp_ptr_vec_elems(PTR_VEC *vec)
Definition: esql_misc.c:335
void pp_free_cursor(CURSOR *cursor)
Definition: esql_cursor.c:90
unsigned int pp_uci_opt
ex_msg
Definition: esql_misc.h:110
HOST_VAR * pp_addr_of(HOST_VAR *var)
void esql_yy_sync_lineno(void)
void pp_disallow_storage_classes(void)
char * pp_attr_str(LINK *type)
void pp_reset_current_type_spec(void)
Definition: esql_declare.c:639
ECHO_FN pp_set_echo(ECHO_FN)
void emit_line_directive(void)
int pp_internal_ind
void pp_finish(void)
Definition: esql_misc.c:163
void pp_discard_link_chain(LINK *p)
void pp_free_host_ref(HOST_REF *ref)
void pp_discard_structdef(STRUCTDEF *sdef)
void pp_add_symbols_to_table(SYMBOL *sym)
Definition: esql_declare.c:304
enum when_condition WHEN_CONDITION
LINK * pp_new_link(void)
int pp_dump_malloc_info
void pp_free_host_lod(HOST_LOD *lod)
HOST_VAR * pp_struct_deref(HOST_VAR *var, char *field, int indirect)
void pp_discard_symbol(SYMBOL *sym)
char * pp_include_file
void pp_print_decls(SYMBOL *sym_chain, int preechoed)
void pp_gather_output_refs(void)
varstring pt_statement_buf
void echo_vstr(const char *, int)
void pp_remove_cursors_from_table(CURSOR *chain)
Definition: esql_cursor.c:220
STRUCTDEF * pp_new_pseudo_def(SPECIFIER_NOUN type, const char *subscript)
const char * VARCHAR_LENGTH_NAME
LINK * pp_current_type_spec(void)
Definition: esql_declare.c:663
void esql_yy_pop_mode(void)
static HOST_LOD * output_refs
Definition: esql_misc.h:304
void pp_pop_spec_scope(void)
Definition: esql_declare.c:626
void pp_add_cursor_to_scope(CURSOR *cursor)
void esql_yy_echo(const char *str)
varstring pp_host_var_buf
Definition: esql_misc.c:58
void pp_init_whenever_scope(WHENEVER_SCOPE *scope, WHENEVER_SCOPE *old_scope)
Definition: esql_whenever.c:67
void pp_cursor_init(void)
Definition: esql_cursor.c:132
void pp_free_ptr_vec(PTR_VEC *vec)
Definition: esql_misc.c:231
HOST_REF * pp_add_host_str(char *str)
SYMBOL * pp_clone_symbol(SYMBOL *sym)
ECHO_FN echo_fn
SYMTAB * pp_Symbol_table
PTR_VEC * pp_add_ptr(PTR_VEC *vec, void *new_elem)
Definition: esql_misc.c:294
STRUCTDEF * pp_new_structdef(const char *tag)
void pp_clear_host_refs(void)
void esql_yyredef(char *)
void pp_push_spec_scope(void)
Definition: esql_declare.c:577
varstring * yy_get_buf()
HOST_VAR * pp_ptr_deref(HOST_VAR *var, int style)
HOST_REF * pp_check_type(HOST_REF *ref, BITSET typeset, const char *msg)
int pp_the_same_type(LINK *p1, LINK *p2, int relax)
void pp_make_typedef_names_visible(int)
Definition: esql_declare.c:515
int pp_dump_scope_info
varstring pp_subscript_buf
Definition: esql_misc.c:57
void(* ECHO_FN)(const char *, int)
Definition: esql_misc.h:95
scanner_mode
Definition: esql_misc.h:134
void pp_free_host_var(HOST_VAR *var)
int pp_disable_varchar_length
int pp_enable_uci_trace
void pp_discard_structdef_chain(STRUCTDEF *sdef)
SYMTAB * pp_new_symtab(void)
void pp_discard_symbol_chain(SYMBOL *sym)
void pp_discard_cursor_chain(CURSOR *chain)
Definition: esql_cursor.c:239
const char ** p
Definition: dynamic_load.c:945
char * pp_strdup(const char *str)
Definition: esql_misc.c:372
void esql_yy_push_mode(enum scanner_mode)
void pp_decl_finish(void)
Definition: esql_declare.c:555
void pp_pop_name_scope(void)
Definition: esql_declare.c:465
void pp_add_spec_to_decl(LINK *p_spec, SYMBOL *decl_chain)
Definition: esql_declare.c:213
void pp_add_storage_class(int sc)
Definition: esql_declare.c:677