static void ExecTable(char *param) { char *t; VERBOSE(1, ("ExecTable(%s)\n", param)); if (FltOptions('c')) { t = skip_ident(param); if (*skip_blanks(t) == '\0') { int save = *t; *t = 0; if (*param) { flt_make_symtab(param); flt_read_keywords(MY_NAME); } else { set_symbol_table(default_table); } *t = (char) save; } } t = skip_ident(param); flt_puts(param, (int) (t - param), Literal_attr); if (*skip_blanks(t) == '\0') { flt_puts(t, (int) strlen(t), ""); } else { flt_error("unexpected tokens"); flt_puts(t, (int) strlen(t), Error_attr); } }
void flt_make_symtab(const char *table_name) { if (*table_name == '\0') { table_name = default_table; } if (!set_symbol_table(table_name)) { CLASS *p; if ((p = typecallocn(CLASS, (size_t) 1)) == 0) { CannotAllocate("flt_make_symtab"); return; } p->name = strmalloc(table_name); if (p->name == 0) { free(p); CannotAllocate("flt_make_symtab"); return; } #if !USE_TSEARCH p->data = typecallocn(KEYWORD *, HASH_LENGTH); if (p->data == 0) { free(p->name); free(p); CannotAllocate("flt_make_symtab"); return; } #endif p->next = classes; classes = p; my_table = p->data; current_class = p; VERBOSE(1, ("flt_make_symtab(%s)", table_name)); /* * Mark all of the standard predefined classes when we first create a * symbol table. Some filters may define their own special classes, * and not all filters use all of these classes, but it's a lot simpler * than putting the definitions into every ".key" file. */ insert_keyword(NAME_ACTION, ATTR_ACTION, 1); insert_keyword(NAME_COMMENT, ATTR_COMMENT, 1); insert_keyword(NAME_ERROR, ATTR_ERROR, 1); insert_keyword(NAME_IDENT, ATTR_IDENT, 1); insert_keyword(NAME_IDENT2, ATTR_IDENT2, 1); insert_keyword(NAME_KEYWORD, ATTR_KEYWORD, 1); insert_keyword(NAME_KEYWRD2, ATTR_KEYWRD2, 1); insert_keyword(NAME_LITERAL, ATTR_LITERAL, 1); insert_keyword(NAME_NUMBER, ATTR_NUMBER, 1); insert_keyword(NAME_PREPROC, ATTR_PREPROC, 1); insert_keyword(NAME_TYPES, ATTR_TYPES, 1); }
/* * Useful for diverting to another symbol table in the same key-file, for * performance. */ static void ExecTable(const char *param) { if (*param) { flt_make_symtab(param); flt_read_keywords(MY_NAME); /* provide default values for this table */ } else { set_symbol_table(default_table); } }
/* * Include a symbol table from another key-file, creating it in a table named * according to the parameter. */ static void ExecSource(const char *param) { int save_meta = meta_ch; int save_eqls = eqls_ch; flt_make_symtab(param); flt_read_keywords(MY_NAME); /* provide default values for this table */ flt_read_keywords(param); set_symbol_table(flt_name()); meta_ch = save_meta; eqls_ch = save_eqls; }
/* * Include a symbol table from another key-file. */ static void ExecSource(char *param) { int save_meta = meta_ch; int save_eqls = eqls_ch; flt_make_symtab(param); flt_read_keywords(MY_NAME); flt_read_keywords(param); set_symbol_table(flt_name()); meta_ch = save_meta; eqls_ch = save_eqls; flt_puts(param, (int) strlen(param), Literal_attr); }
UTreeEvaluator(Context &ctx, VarMap &var_map) : ctx(ctx) , var_map(var_map) { set_symbol_table(ctx, table); }
UTreeEvaluator(Context &ctx) : ctx(ctx) , var_map_ptr(new VarMap()) , var_map(*var_map_ptr) { set_symbol_table(ctx, table); }