Alien-TinyCCx
view release on metacpan or search on metacpan
src/libtcc.h view on Meta::CPAN
* TokenSym_p my_callback(char * name, int len, void * data, extended_symtab_p* containing_symtab) */
typedef TokenSym_p (*extended_symtab_lookup_by_name_callback)(char * name,
int len, void * data, extended_symtab_p* containing_symtab);
/* Callback function signature for sym-is-used:
* void my_callback(char * name, int len, void * data) */
typedef void (*extended_symtab_sym_used_callback)(char * sym_name, int len, void * data);
/* Callback function signature for compilation unit preparation:
* void my_callback(TokenSym_p* local_ts_list, void * data) */
typedef void (*extended_symtab_prep_callback)(void * data);
/* Set the lookup/sym-used callback functions */
LIBTCCAPI void tcc_set_extended_symtab_callbacks (
TCCState * compiler_state,
extended_symtab_lookup_by_name_callback new_name_callback,
extended_symtab_sym_used_callback new_sym_used_callback,
extended_symtab_prep_callback new_prep_callback,
void * data
);
/*** For symbol table caching ***/
LIBTCCAPI extended_symtab_p tcc_deserialize_extended_symtab(const char * input_filename);
LIBTCCAPI int tcc_serialize_extended_symtab(extended_symtab_p symtab, const char * output_filename);
src/tccexsymtab.c view on Meta::CPAN
TokenSym * ts = tcc_get_extended_tokensym(symtab, name);
if (ts == NULL) return NULL;
return (void*) ts->hash_next;
}
/******************************************************************************/
/* extended symtab copy */
/******************************************************************************/
/* The user may want fine-grained control over the order of symbol table lookup.
* Thus, I provide a set of callbacks to look for names, add symbols to compiler
* contexts, and prep the compiler state before things get started. */
LIBTCCAPI void tcc_set_extended_symtab_callbacks (
TCCState * s,
extended_symtab_lookup_by_name_callback new_name_callback,
extended_symtab_sym_used_callback new_sym_used_callback,
extended_symtab_prep_callback new_prep_callback,
void * data
) {
s->symtab_name_callback = new_name_callback;
s->symtab_sym_used_callback = new_sym_used_callback;
s->symtab_prep_callback = new_prep_callback;
s->symtab_callback_data = data;
src/tccexsymtab.h view on Meta::CPAN
void copy_extended_symbols_to_exsymtab(TCCState *state);
/* tcc_get_extended_symbol_table in libtcc.h */
/* tcc_get_extended_tokensym in libtcc.h */
/* tcc_get_extended_symbol in libtcc.h */
/* tcc_get_next_extended_symbol_name in libtcc.h */
/******************************************************************************/
/* extended symtab copy */
/******************************************************************************/
/* tcc_set_extended_symtab_callbacks is in libtcc.h */
/* tcc_save_extended_symtab is in libtcc.h */
Sym * get_new_symtab_pointer (Sym * old, ram_hash * rh);
Sym * get_new_deftab_pointer (Sym * old, ram_hash * rh);
int tokenstream_copy (int * stream, int * to_stream, extended_symtab * symtab);
#define tokenstream_len(stream) tokenstream_copy(stream, 0, 0)
void copy_extended_symtab (TCCState * s, Sym * define_start, int tok_start);
LIBTCCAPI void tcc_delete_extended_symbol_table (extended_symtab * symtab);
LIBTCCAPI int tcc_extended_symtab_test(extended_symtab * symtab, int to_test, const char * name);
src/tests/exsymtab/28-three-contexts-intertwined-preprocessor-macro.c view on Meta::CPAN
if (tcc_compile_string(s_first, first_code) == -1) return 1;
if (tcc_relocate(s_first, TCC_RELOCATE_AUTO) == -1) return 1;
my_data.oldest_symtab = tcc_get_extended_symbol_table(s_first);
pass("First code string compiled and relocated fine");
TCCState *s_second = tcc_new();
my_data.current_context = s_second;
SIMPLE_SETUP(s_second);
tcc_save_extended_symtab(s_second);
tcc_set_extended_symtab_callbacks(s_second, &my_lookup_by_name,
&my_sym_used, &my_prep, &my_data);
if (tcc_compile_string(s_second, second_code) == -1) return 1;
if (tcc_relocate(s_second, TCC_RELOCATE_AUTO) == -1) return 1;
my_data.middle_symtab = tcc_get_extended_symbol_table(s_second);
pass("Second code string compiled and relocated fine");
TCCState *s_third = tcc_new();
my_data.current_context = s_third;
SIMPLE_SETUP(s_third);
tcc_set_extended_symtab_callbacks(s_third, &my_lookup_by_name,
&my_sym_used, &my_prep, &my_data);
if (tcc_compile_string(s_third, third_code) == -1) return 1;
if (tcc_relocate(s_third, TCC_RELOCATE_AUTO) == -1) return 1;
pass("Third code string compiled and relocated fine");
/* ---- Check code string that depends on the macro ---- */
int (*gives_nineteen)() = tcc_get_symbol(s_third, "test");
if (gives_nineteen == NULL) return 1;
src/tests/exsymtab/62-two-contexts-static-globals.c view on Meta::CPAN
TCCState *s2 = tcc_new();
if (!s2) return 1;
if (argc == 2 && !memcmp(argv[1], "lib_path=",9))
tcc_set_lib_path(s2, argv[1]+9);
else
tcc_set_lib_path(s2, "../..");
tcc_set_output_type(s2, TCC_OUTPUT_MEMORY);
tcc_set_error_func(s2, my_error_func, my_error_func);
callback_data.second_context = s2;
tcc_set_extended_symtab_callbacks(s2, &lookup_by_name, &sym_used, &prep_table, &callback_data);
tcc_compile_string(s2, second_code);
tcc_relocate(s2, TCC_RELOCATE_AUTO);
/* See if the error was thrown */
is_i(error_thrown, 1, "Static global variables do not bleed scope");
/* ---- clean up the memory ---- */
tcc_delete_extended_symbol_table(my_symtab);
tcc_delete(s1);
src/tests/exsymtab/test_setup.h view on Meta::CPAN
callback_data.first_symtab = my_symtab;
#define setup_and_compile_second_state(s, code) \
if (!s) return 1; \
if (argc == 2 && !memcmp(argv[1], "lib_path=",9)) \
tcc_set_lib_path(s, argv[1]+9); \
else \
tcc_set_lib_path(s, "../.."); \
tcc_set_output_type(s, TCC_OUTPUT_MEMORY); \
callback_data.second_context = s; \
tcc_set_extended_symtab_callbacks(s, &lookup_by_name, \
&sym_used, &prep_table, &callback_data); \
if (tcc_compile_string(s, code) == -1) return 1
#define relocate_second_state(s) \
if (tcc_relocate(s, TCC_RELOCATE_AUTO) == -1) return 1; \
pass("Dependent code string compiled and relocated fine")
#define setup_and_relocate_second_state(s, code) \
setup_and_compile_second_state(s, code); \
relocate_second_state(s)
( run in 0.576 second using v1.01-cache-2.11-cpan-9b1e4054eb1 )