CUBRID Engine
latest
|
#include "config.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "esql_grammar.h"
#include "esql_misc.h"
#include "memory_alloc.h"
#include "esql_translate.h"
#include "variable_string.h"
Go to the source code of this file.
Classes | |
struct | spec_state |
struct | scope |
Macros | |
#define | NFRAMES 8 |
#define | MAX_LONGS_ALLOWED 1 |
#define | TOK_SPACE " " |
#define | TOK_COMMA "," |
#define | TOK_LB "{" |
#define | TOK_RB "}" |
#define | TOK_LP "(" |
#define | TOK_RP ")" |
#define | TOK_SC ";" |
#define | TOK_STAR "*" |
#define | TOK_AUTO "auto" |
#define | TOK_CONST "const" |
#define | TOK_EXTERN "extern" |
#define | TOK_CHAR "char" |
#define | TOK_DOUBLE "double" |
#define | TOK_FLOAT "float" |
#define | TOK_INT "int" |
#define | TOK_LONG "long" |
#define | TOK_REGISTER "register" |
#define | TOK_SHORT "short" |
#define | TOK_STATIC "static" |
#define | TOK_TYPEDEF "typedef" |
#define | TOK_UNSIGNED "unsigned" |
#define | TOK_VOID "void" |
#define | TOK_VOLATILE "volatile" |
#define | TOK_INVALID "whoknows" |
Typedefs | |
typedef struct spec_state | SPEC_STATE |
typedef struct scope | SCOPE |
Enumerations | |
enum | { MSG_BAD_STORAGE_CLASS = 1, MSG_MALFORMED_CHAIN = 2, MSG_SPECIFIER_NOT_ALLOWED = 3, MSG_ILLEGAL_CLASS_COMBO = 4, MSG_ILLEGAL_TYPE_COMBO = 5, MSG_ILLEGAL_MODIFIER_COMBO = 6, MSG_TYPE_SPEC_UNEXPECTED_CASE = 7, MSG_TYPE_ADJ_UNEXPECTED_CASE = 8, MSG_BAD_PSEUDO_DECL = 9 } |
Variables | |
FILE * | esql_yyout |
int | pp_recognizing_typedef_names = 1 |
int | pp_nesting_level = 0 |
static SCOPE * | pp_current_name_scope |
static SPEC_STATE * | pp_current_spec_scope |
static SCOPE * | pp_name_scope_base |
static SCOPE * | pp_name_scope_limit |
static SPEC_STATE * | pp_spec_scope_base |
static SPEC_STATE * | pp_spec_scope_limit |
#define MAX_LONGS_ALLOWED 1 |
Definition at line 39 of file esql_declare.c.
Referenced by pp_add_type_adj().
#define NFRAMES 8 |
Definition at line 38 of file esql_declare.c.
Referenced by pp_decl_init(), pp_push_name_scope(), and pp_push_spec_scope().
#define TOK_AUTO "auto" |
Definition at line 94 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_CHAR "char" |
Definition at line 97 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_COMMA "," |
Definition at line 87 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_CONST "const" |
Definition at line 95 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_DOUBLE "double" |
Definition at line 98 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_EXTERN "extern" |
Definition at line 96 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_FLOAT "float" |
Definition at line 99 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_INT "int" |
Definition at line 100 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_INVALID "whoknows" |
Definition at line 109 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_LB "{" |
Definition at line 88 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_LONG "long" |
Definition at line 101 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_LP "(" |
Definition at line 90 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_RB "}" |
Definition at line 89 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_REGISTER "register" |
Definition at line 102 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_RP ")" |
Definition at line 91 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_SC ";" |
Definition at line 92 of file esql_declare.c.
Referenced by pp_print_decls(), and pp_print_link().
#define TOK_SHORT "short" |
Definition at line 103 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_SPACE " " |
Definition at line 86 of file esql_declare.c.
Referenced by pp_print_decl(), pp_print_decls(), and pp_print_link().
#define TOK_STAR "*" |
Definition at line 93 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_STATIC "static" |
Definition at line 104 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_TYPEDEF "typedef" |
Definition at line 105 of file esql_declare.c.
Referenced by pp_print_decl().
#define TOK_UNSIGNED "unsigned" |
Definition at line 106 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_VOID "void" |
Definition at line 107 of file esql_declare.c.
Referenced by pp_print_link().
#define TOK_VOLATILE "volatile" |
Definition at line 108 of file esql_declare.c.
Referenced by pp_print_link().
Definition at line 42 of file esql_declare.c.
typedef struct spec_state SPEC_STATE |
Definition at line 41 of file esql_declare.c.
anonymous enum |
Definition at line 72 of file esql_declare.c.
void pp_add_cursor_to_scope | ( | CURSOR * | cursor | ) |
Definition at line 1090 of file esql_declare.c.
References scope::cursor_chain, and cursor::next.
Referenced by pp_new_cursor().
void pp_add_initializer | ( | SYMBOL * | sym | ) |
Definition at line 1056 of file esql_declare.c.
References link::d, link::decl, IS_ARRAY, NULL, declarator::num_ele, and symbol::type.
Definition at line 213 of file esql_declare.c.
References symbol::args, link::d, link::decl, esql_yyverror(), symbol::etype, EX_DECL_SET, link::from_tdef, IS_ARRAY, IS_PSEUDO_TYPE, IS_TYPEDEF, IS_VAR_TYPE, symbol::level, MSG_BAD_PSEUDO_DECL, MSG_MALFORMED_CHAIN, N_VARCHAR, link::next, symbol::next, specifier::noun, NULL, declarator::num_ele, pp_clone_type(), pp_discard_link(), pp_get_msg(), pp_new_pseudo_def(), pp_new_symbol(), pp_set_class_bit(), pp_type_str(), link::s, link::tdef, symbol::type, specifier::v_struct, and specifier::val.
Referenced by pp_add_dummy_structdef(), pp_hv_init(), and pp_new_pseudo_def().
void pp_add_storage_class | ( | int | sc | ) |
Definition at line 677 of file esql_declare.c.
References esql_yyverror(), EX_DECL_SET, MSG_ILLEGAL_CLASS_COMBO, MSG_SPECIFIER_NOT_ALLOWED, p, pp_current_spec_scope, pp_get_msg(), pp_set_class_bit(), spec_state::sc_allowed, spec_state::spec, spec_state::storage_class_seen, and spec_state::typedef_seen.
Referenced by pp_add_dummy_structdef(), and pp_hv_init().
void pp_add_struct_spec | ( | STRUCTDEF * | sdef | ) |
Definition at line 707 of file esql_declare.c.
References structdef::by_name, link::decl, esql_yyverror(), EX_DECL_SET, specifier::is_by_name, spec_state::longs_seen, MSG_ILLEGAL_MODIFIER_COMBO, MSG_ILLEGAL_TYPE_COMBO, N_STRUCTURE, specifier::noun, spec_state::noun_seen, NULL, p, pp_current_spec_scope, pp_discard_structdef(), pp_get_msg(), link::s, spec_state::shorts_seen, spec_state::signed_seen, spec_state::spec, specifier::v_struct, and specifier::val.
Referenced by pp_add_dummy_structdef().
void pp_add_symbols_to_table | ( | SYMBOL * | sym | ) |
Definition at line 304 of file esql_declare.c.
References hash_tab_s::add_symbol, link::decl, esql_yyredef(), symbol::etype, specifier::is_extern, specifier::is_static, symbol::level, symbol::name, symbol::next, NULL, pp_discard_symbol(), pp_findsym(), pp_Symbol_table, pp_the_same_type(), link::s, specifier::sclass, scope::sym_chain, and symbol::type.
Referenced by pp_hv_init().
void pp_add_type_adj | ( | int | adj | ) |
Definition at line 857 of file esql_declare.c.
References spec_state::const_seen, link::decl, esql_yyverror(), EX_DECL_SET, specifier::is_long, specifier::is_short, specifier::is_unsigned, spec_state::longs_seen, MAX_LONGS_ALLOWED, MSG_ILLEGAL_MODIFIER_COMBO, MSG_TYPE_ADJ_UNEXPECTED_CASE, N_CHR, N_FLOAT, N_INT, specifier::noun, spec_state::noun_seen, p, pp_current_spec_scope, pp_get_msg(), link::s, spec_state::shorts_seen, spec_state::signed_seen, spec_state::spec, and spec_state::volatile_seen.
Referenced by pp_hv_init().
void pp_add_type_noun | ( | int | type | ) |
Definition at line 754 of file esql_declare.c.
References spec_state::const_seen, link::decl, esql_yyverror(), EX_DECL_SET, specifier::is_const, specifier::is_long, specifier::is_short, specifier::is_volatile, spec_state::longs_seen, MSG_ILLEGAL_MODIFIER_COMBO, MSG_ILLEGAL_TYPE_COMBO, MSG_TYPE_SPEC_UNEXPECTED_CASE, N_BIT, N_CHR, N_FLOAT, N_INT, N_VARBIT, N_VARCHAR, N_VOID, specifier::noun, spec_state::noun_seen, NULL, p, pp_current_spec_scope, pp_get_msg(), link::s, spec_state::shorts_seen, spec_state::signed_seen, spec_state::spec, specifier::v_struct, specifier::val, and spec_state::volatile_seen.
Referenced by pp_hv_init(), and pp_new_pseudo_def().
void pp_add_typedefed_spec | ( | LINK * | spec | ) |
Definition at line 995 of file esql_declare.c.
References link::decl, esql_yyverror(), EX_DECL_SET, specifier::is_const, specifier::is_extern, specifier::is_static, specifier::is_volatile, spec_state::longs_seen, MSG_ILLEGAL_MODIFIER_COMBO, MSG_ILLEGAL_TYPE_COMBO, link::next, spec_state::noun_seen, NULL, p, pp_current_spec_scope, pp_discard_link_chain(), pp_get_msg(), link::s, specifier::sclass, spec_state::shorts_seen, spec_state::signed_seen, spec_state::spec, and link::tdef.
Referenced by pp_new_pseudo_def().
void pp_add_whenever_to_scope | ( | WHEN_CONDITION | when, |
WHEN_ACTION | action, | ||
char * | name | ||
) |
Definition at line 1108 of file esql_declare.c.
References whenever_action::action, whenever_scope::cond, esql_Translate_table, whenever_action::name, NULL, p, strdup(), esql_translate_table_s::tr_whenever, and scope::whenever.
LINK* pp_current_type_spec | ( | void | ) |
Definition at line 663 of file esql_declare.c.
References spec_state::spec.
Referenced by pp_add_dummy_structdef(), pp_hv_init(), and pp_new_pseudo_def().
void pp_decl_finish | ( | void | ) |
Definition at line 555 of file esql_declare.c.
References free_and_init, pp_pop_name_scope(), and pp_pop_spec_scope().
Referenced by pp_finish().
void pp_decl_init | ( | void | ) |
Definition at line 530 of file esql_declare.c.
References NFRAMES, NULL, pp_make_typedef_names_visible(), pp_malloc(), pp_nesting_level, pp_push_name_scope(), and pp_push_spec_scope().
Referenced by pp_startup().
void pp_disallow_storage_classes | ( | void | ) |
Definition at line 1076 of file esql_declare.c.
References spec_state::sc_allowed.
void pp_do_enum | ( | SYMBOL * | sym | ) |
Definition at line 397 of file esql_declare.c.
References hash_tab_s::add_symbol, C_CONSTANT, link::decl, esql_yyredef(), symbol::name, p, pp_new_type_spec(), pp_Symbol_table, link::s, specifier::sclass, symbol::type, specifier::v_int, and specifier::val.
void pp_make_typedef_names_visible | ( | int | sense | ) |
Definition at line 515 of file esql_declare.c.
References pp_recognizing_typedef_names, and scope::recognizing_typedef_names.
Referenced by pp_decl_init(), pp_pop_name_scope(), and pp_push_name_scope().
|
static |
Definition at line 185 of file esql_declare.c.
References C_AUTO, link::class_, link::decl, N_INT, specifier::noun, NULL, p, pp_new_link(), link::s, specifier::sclass, and SPECIFIER.
Referenced by pp_do_enum(), and pp_reset_current_type_spec().
void pp_pop_name_scope | ( | void | ) |
Definition at line 465 of file esql_declare.c.
References scope::cursor_chain, esql_yyout, NULL, pp_current_name_scope, pp_discard_cursor_chain(), pp_discard_structdef_chain(), pp_discard_symbol_chain(), pp_dump_scope_info, pp_finish_whenever_scope(), pp_make_typedef_names_visible(), pp_nesting_level, pp_print_cursors(), pp_print_syms(), pp_remove_cursors_from_table(), pp_remove_structdefs_from_table(), pp_remove_symbols_from_table(), scope::recognizing_typedef_names, scope::struct_chain, scope::sym_chain, and scope::whenever.
Referenced by pp_decl_finish().
void pp_pop_spec_scope | ( | void | ) |
Definition at line 626 of file esql_declare.c.
Referenced by pp_decl_finish(), and pp_new_pseudo_def().
Definition at line 1359 of file esql_declare.c.
References D_ARRAY, symbol::name, pp_print_link(), link::tdef, TOK_SPACE, TOK_TYPEDEF, symbol::type, vs_clear(), vs_prepend(), and vs_strcpy().
Referenced by pp_print_decls(), and pp_print_link().
void pp_print_decls | ( | SYMBOL * | decl_chain, |
int | preechoed | ||
) |
Definition at line 1390 of file esql_declare.c.
References symbol::args, esql_yyout, IS_PSEUDO_TYPE, symbol::name, symbol::next, pp_disable_varchar_length, pp_print_decl(), TOK_SC, TOK_SPACE, symbol::type, vs_free(), vs_new(), and vs_str().
Definition at line 1128 of file esql_declare.c.
References declarator::args, link::d, D_ARRAY, D_FUNCTION, D_POINTER, declarator::dcl_type, link::decl, fields, structdef::fields, link::from_tdef, specifier::is_auto, specifier::is_by_name, specifier::is_const, specifier::is_extern, specifier::is_long, specifier::is_register, specifier::is_short, IS_SPECIFIER, specifier::is_static, specifier::is_unsigned, specifier::is_volatile, N_BIT, N_CHR, N_FLOAT, N_INT, N_LABEL, N_STRUCTURE, N_VARBIT, N_VARCHAR, N_VOID, symbol::name, link::next, symbol::next, specifier::noun, NULL, declarator::num_ele, pp_print_decl(), link::s, structdef::tag, link::tdef, TOK_AUTO, TOK_CHAR, TOK_COMMA, TOK_CONST, TOK_DOUBLE, TOK_EXTERN, TOK_FLOAT, TOK_INT, TOK_INVALID, TOK_LB, TOK_LONG, TOK_LP, TOK_RB, TOK_REGISTER, TOK_RP, TOK_SC, TOK_SHORT, TOK_SPACE, TOK_STAR, TOK_STATIC, TOK_UNSIGNED, TOK_VOID, TOK_VOLATILE, structdef::type_string, specifier::v_struct, specifier::val, vs_append(), vs_clear(), vs_free(), vs_new(), vs_prepend(), vs_sprintf(), vs_str(), vs_strcat(), and vs_strcpy().
Referenced by pp_print_decl(), and pp_print_specs().
void pp_print_specs | ( | LINK * | link | ) |
Definition at line 1414 of file esql_declare.c.
References D_ARRAY, esql_yyout, pp_print_link(), vs_free(), vs_new(), and vs_str().
void pp_push_name_scope | ( | void | ) |
Definition at line 418 of file esql_declare.c.
References scope::cursor_chain, esql_yyverror(), EX_MISC_SET, MSG_OUT_OF_MEMORY, NFRAMES, NULL, pp_get_msg(), pp_init_whenever_scope(), pp_make_typedef_names_visible(), pp_nesting_level, scope::recognizing_typedef_names, scope::struct_chain, scope::sym_chain, and scope::whenever.
Referenced by pp_decl_init().
void pp_push_spec_scope | ( | void | ) |
Definition at line 577 of file esql_declare.c.
References spec_state::const_seen, esql_yyverror(), EX_MISC_SET, spec_state::longs_seen, MSG_OUT_OF_MEMORY, NFRAMES, spec_state::noun_seen, NULL, p, pp_get_msg(), spec_state::sc_allowed, spec_state::shorts_seen, spec_state::signed_seen, spec_state::spec, spec_state::storage_class_seen, spec_state::typedef_seen, and spec_state::volatile_seen.
Referenced by pp_decl_init(), and pp_new_pseudo_def().
|
static |
Definition at line 380 of file esql_declare.c.
References structdef::next, pp_Struct_table, and hash_tab_s::remove_symbol.
Referenced by pp_pop_name_scope().
void pp_remove_symbols_from_table | ( | SYMBOL * | sym_chain | ) |
Definition at line 361 of file esql_declare.c.
References symbol::next, pp_Symbol_table, and hash_tab_s::remove_symbol.
Referenced by pp_pop_name_scope().
void pp_reset_current_type_spec | ( | void | ) |
Definition at line 639 of file esql_declare.c.
References spec_state::const_seen, spec_state::longs_seen, spec_state::noun_seen, p, pp_current_spec_scope, pp_new_type_spec(), spec_state::sc_allowed, spec_state::shorts_seen, spec_state::signed_seen, spec_state::spec, spec_state::storage_class_seen, spec_state::typedef_seen, and spec_state::volatile_seen.
Referenced by pp_add_dummy_structdef(), pp_hv_init(), and pp_new_pseudo_def().
|
static |
Definition at line 137 of file esql_declare.c.
References C_FIXED, C_TYPEDEF, link::decl, esql_yyverror(), EX_DECL_SET, specifier::is_auto, specifier::is_const, specifier::is_extern, specifier::is_register, specifier::is_static, specifier::is_volatile, MSG_BAD_STORAGE_CLASS, pp_get_msg(), link::s, and specifier::sclass.
Referenced by pp_add_spec_to_decl(), and pp_add_storage_class().
FILE* esql_yyout |
Referenced by pp_pop_name_scope(), pp_print_decls(), and pp_print_specs().
|
static |
Definition at line 116 of file esql_declare.c.
Referenced by pp_pop_name_scope().
|
static |
Definition at line 117 of file esql_declare.c.
Referenced by pp_add_storage_class(), pp_add_struct_spec(), pp_add_type_adj(), pp_add_type_noun(), pp_add_typedefed_spec(), and pp_reset_current_type_spec().
|
static |
Definition at line 118 of file esql_declare.c.
|
static |
Definition at line 118 of file esql_declare.c.
int pp_nesting_level = 0 |
Definition at line 114 of file esql_declare.c.
Referenced by pp_decl_init(), pp_new_cursor(), pp_new_pseudo_def(), pp_pop_name_scope(), and pp_push_name_scope().
int pp_recognizing_typedef_names = 1 |
Definition at line 113 of file esql_declare.c.
Referenced by pp_make_typedef_names_visible().
|
static |
Definition at line 119 of file esql_declare.c.
|
static |
Definition at line 119 of file esql_declare.c.