Ejemplo n.º 1
0
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);
    }
Ejemplo n.º 2
0
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
}
Ejemplo n.º 3
0
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);
    }
Ejemplo n.º 4
0
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);
}