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 )