paranode get_prim(char* prim_name) { CAMLparam0(); CAMLlocal1(prim); // build the var expression prim = caml_callback(*ocaml_get_prim, caml_copy_string(prim_name)); // build the node and return CAMLreturnT(paranode, mk_root(prim)); }
static int init_inode() { int i; puts("initialize"); memset(inodes, 0, sizeof(inodes)); for(i = 0; i < MAX_FS_VALUE; i ++) { inodes[i].name = (char*)calloc(sizeof(char),MAX_NAME_LEN); strcpy(inodes[i].name, ""); inodes[i].data = NULL; } mk_root(); puts("memset end"); return 0; }
paranode mk_node(value exp, source_info_t *src_info) { // printf("C: mk_node: src_info addr = %d\n", src_info); CAMLparam1(exp); CAMLlocal3(ocaml_src_info, ast_info, node); // build the ast_info and src_info //printf("C: making source info\n"); ocaml_src_info = mk_src_info(src_info); //printf("C: mk_ast_info\n"); ast_info = caml_callback(*ocaml_mk_ast_info, Val_unit); //printf("-- AST INFO POINTER: %p\n", ast_info); //printf("C: allocating node\n"); // build the node node = caml_alloc_tuple(3); Store_field(node, 0, exp); Store_field(node, 1, ocaml_src_info); Store_field(node, 2, ast_info); paranode wrapped = mk_root(node); //printf("Contains value %d\n", wrapped->v); CAMLreturnT(paranode, wrapped); }