int main(int argc, char **argv) { int test_to_run = -1; if (argc > 1) { sscanf(argv[1], "%d", &test_to_run); } if ((test_to_run == 1) || (test_to_run == -1)) { /* test the basics */ char code_string[] = "\ {\n\ static int j = 4;\n\ static long k = 10;\n\ static short l = 3;\n\ static int m = 0;\n\ \n\ j = j + 1;\n\ k = k + 2;\n\ l = l + 3;\n\ \n\ return j + k + l + m;\n\ }"; cod_parse_context context; cod_exec_context ec; static char extern_string[] = "int printf(string format, ...);"; static cod_extern_entry externs[] = { {"printf", (void*)(long)printf}, {(void*)0, (void*)0} }; cod_code gen_code; long ret; long (*func)(); GEN_PARSE_CONTEXT(context); cod_assoc_externs(context, externs); cod_parse_for_context(extern_string, context); gen_code = cod_code_gen(code_string, context); ec = cod_create_exec_context(gen_code); func = (long(*)()) (long) gen_code->func; ret = func(EC_param0); assert(ret == 23); ret = func(EC_param0); assert(ret == 29); ret = func(EC_param0); assert(ret == 35); cod_exec_context_free(ec); cod_code_free(gen_code); cod_free_parse_context(context); }
extern void cod_add_standard_elements(cod_parse_context context) { #ifdef HAVE_ATL_H sm_ref attr_node = cod_new_reference_type_decl(); attr_node->node.reference_type_decl.name = strdup("attr_list"); cod_add_decl_to_parse_context("attr_list", attr_node, context); cod_add_decl_to_scope("attr_list", attr_node, context); cod_add_defined_type("attr_list", context); #endif #ifdef HAVE_CERCS_ENV_H cod_add_struct_type("chr_time", chr_time_list, context); #endif cod_add_defined_type("cod_type_spec", context); cod_add_defined_type("cod_exec_context", context); cod_add_defined_type("cod_closure_context", context); cod_semanticize_added_decls(context); #if defined(HAVE_ATL_H) && defined(HAVE_CERCS_ENV_H) cod_assoc_externs(context, externs); cod_parse_for_context(extern_string, context); cod_swap_decls_to_standard(context); #endif }
int main(int argc, char **argv) { char *test_only = NULL; int i = 1; for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-v") == 0) { verbose++; } else if (strcmp(argv[i], "-test_only") == 0){ test_only = argv[++i]; } else { printf("Unknown argument %s\n", argv[i]); } } if (!test_only || (strcmp(test_only, "paramattr") == 0)) { static char extern_string[] = "int printf(string format, ...);"; #ifndef PRINTF_DEFINED extern int printf(); #endif static cod_extern_entry externs[] = { {"printf", (void*)(long)printf}, {(void*)0, (void*)0} }; /* test external call */ static char code[] = "{\ if (attr_set(l, \"test_value\")) {\n\ return attr_ivalue(l, \"test_value\");\n\ }\n\ return 0;\n\ }"; cod_parse_context context = new_cod_parse_context(); cod_parse_context context2; cod_code gen_code; int (*func)(attr_list l); attr_list l; cod_assoc_externs(context, externs); cod_parse_for_context(extern_string, context); context2 = cod_copy_context(context); l = create_attr_list(); set_attr(l, attr_atom_from_string("test_value"), Attr_Int4, (attr_value)15); cod_subroutine_declaration("int proc(attr_list l)", context); gen_code = cod_code_gen(code, context); func = (int (*)(attr_list))(long)gen_code->func; if ((func)(l) != 15) { printf("Function didn't return 15\n"); } cod_code_free(gen_code); cod_free_parse_context(context); cod_subroutine_declaration("int proc(attr_list l)", context2); gen_code = cod_code_gen(code, context2); func = (int (*)(attr_list))(long)gen_code->func; if ((func)(l) != 15) { printf("Function didn't return 15\n"); } free_attr_list(l); cod_code_free(gen_code); cod_free_parse_context(context2); }
void add_metrics_routines(stone_type stone, cod_parse_context context) { static char extern_string[] = "\ void libvirt_init();\n\ // 1 void libvirt_open();\n\ // 2 void libvirt_close();\n\ // 3 int libvirt_num_domains();\n\ // 4 int libvirt_num_active_domains();\n\ // 5 int libvirt_num_inactive_domains();\n\ // 6 domain_info *libvirt_get_domain_info();\n\ // 7 domain_disk_info *libvirt_get_domain_disk_info();\n\ // 8 domain_interface_info *libvirt_get_domain_interface_info();\n\ // 9 int libvirt_domain_exists();\n\ // 10 int libvirt_get_domain_id();\n\ // 11 unsigned char libvirt_get_domain_state();\n\ // 12 unsigned long libvirt_get_domain_mem_max();\n\ // 13 unsigned long libvirt_get_domain_mem_used();\n\ // 14 unsigned short libvirt_get_domain_num_vcpus();\n\ // 15 unsigned long long libvirt_get_domain_cpu_total_time();\n\ // 16 unsigned long long libvirt_get_domain_vblock_rreq();\n\ // 17 unsigned long long libvirt_get_domain_vblock_wreq();\n\ // 18 unsigned long long libvirt_get_domain_vblock_rbytes();\n\ // 19 unsigned long long libvirt_get_domain_vblock_wbytes();\n\ // 20 unsigned long long libvirt_get_domain_if_rxbytes();\n\ // 21 unsigned long long libvirt_get_domain_if_txbytes();\n\ // 22 unsigned long long libvirt_get_domain_if_rxpackets();\n\ // 23 unsigned long long libvirt_get_domain_if_txpackets();\n\ // 24 unsigned long long libvirt_get_domain_if_rxerrors();\n\ // 25 unsigned long long libvirt_get_domain_if_txerrors();\n\ // 26 unsigned long long libvirt_get_domain_if_rxdrops();\n\ // 27 unsigned long long libvirt_get_domain_if_txdrops();\n\ // 28 static cod_extern_entry externs[] = { {"libvirt_init", (void *) 0}, // 0 {"libvirt_open", (void *) 0}, // 1 {"libvirt_close", (void *) 0}, // 2 {"libvirt_num_domains", (void *) 0}, // 3 {"libvirt_num_active_domains", (void *) 0}, // 4 {"libvirt_num_inactive_domains", (void *) 0}, // 5 {"libvirt_get_domain_info", (void *) 0}, // 6 {"libvirt_get_domain_disk_info", (void *) 0}, // 7 {"libvirt_get_domain_interface_info", (void *) 0}, // 8 {"libvirt_domain_exists", (void *) 0}, // 9 {"libvirt_get_domain_id", (void *) 0}, // 10 {"libvirt_get_domain_state", (void *) 0}, // 11 {"libvirt_get_domain_mem_max", (void *) 0}, // 12 {"libvirt_get_domain_mem_used", (void *) 0}, // 13 {"libvirt_get_domain_num_vcpus", (void *) 0}, // 14 {"libvirt_get_domain_cpu_total_time", (void *) 0}, // 15 {"libvirt_get_domain_vblock_rreq", (void *) 0}, // 16 {"libvirt_get_domain_vblock_wreq", (void *) 0}, // 17 {"libvirt_get_domain_vblock_rbytes", (void *) 0}, // 18 {"libvirt_get_domain_vblock_wbytes", (void *) 0}, // 19 {"libvirt_get_domain_if_rxbytes", (void *) 0}, // 20 {"libvirt_get_domain_if_txbytes", (void *) 0}, // 21 {"libvirt_get_domain_if_rxpackets", (void *) 0}, // 22 {"libvirt_get_domain_if_txpackets", (void *) 0}, // 23 {"libvirt_get_domain_if_rxerrors", (void *) 0}, // 24 {"libvirt_get_domain_if_txerrors", (void *) 0}, // 25 {"libvirt_get_domain_if_rxdrops", (void *) 0}, // 26 {"libvirt_get_domain_if_txdrops", (void *) 0}, // 27 {(void *) 0, (void *) 0} }; (void) stone; /* * some compilers think it isn't a static initialization to put this * in the structure above, so do it explicitly. */ externs[0].extern_value = (void *) (long) libvirt_init; externs[1].extern_value = (void *) (long) libvirt_open; externs[1].extern_value = (void *) (long) libvirt_close; externs[2].extern_value = (void *) (long) libvirt_num_domains; externs[3].extern_value = (void *) (long) libvirt_num_active_domains; externs[5].extern_value = (void *) (long) libvirt_num_inactive_domains; externs[6].extern_value = (void *) (long) libvirt_get_domain_info; externs[7].extern_value = (void *) (long) libvirt_get_domain_disk_info; externs[8].extern_value = (void *) (long) libvirt_get_domain_interface_info; externs[9].extern_value = (void *) (long) libvirt_domain_exists; externs[10].extern_value = (void *) (long) libvirt_get_domain_id; externs[11].extern_value = (void *) (long) libvirt_get_domain_state; externs[12].extern_value = (void *) (long) libvirt_get_domain_mem_max; externs[13].extern_value = (void *) (long) libvirt_get_domain_mem_used; externs[14].extern_value = (void *) (long) libvirt_get_domain_num_vcpus; externs[15].extern_value = (void *) (long) libvirt_get_domain_cpu_total_time; externs[16].extern_value = (void *) (long) libvirt_get_domain_vblock_rreq; externs[17].extern_value = (void *) (long) libvirt_get_domain_vblock_wreq; externs[18].extern_value = (void *) (long) libvirt_get_domain_vblock_rbytes; externs[19].extern_value = (void *) (long) libvirt_get_domain_vblock_wbytes; externs[20].extern_value = (void *) (long) libvirt_get_domain_if_rxbytes; externs[21].extern_value = (void *) (long) libvirt_get_domain_if_txbytes; externs[22].extern_value = (void *) (long) libvirt_get_domain_if_rxpackets; externs[23].extern_value = (void *) (long) libvirt_get_domain_if_txpackets; externs[24].extern_value = (void *) (long) libvirt_get_domain_if_rxerrors; externs[25].extern_value = (void *) (long) libvirt_get_domain_if_txerrors; externs[26].extern_value = (void *) (long) libvirt_get_domain_if_rxdrops; externs[27].extern_value = (void *) (long) libvirt_get_domain_if_txdrops; cod_assoc_externs(context, externs); cod_parse_for_context(extern_string, context); }