Extending a list on the OCAML side that is initially allocated on the C side

From: nari (nari@ibmoto.com)
Date: Thu Feb 03 2000 - 00:25:37 MET

  • Next message: Dmitry Boulychev: "ASDL port for OCaml."

    Hi,

    I have an OCAML and C function as follows

    **************OCAML side*****************
    let simple_list_test m = m @ [100]
    let _ =
       Callback.register "simple_list_test" simple_list_test;
    ***********************************************

    *************C side***********************
    main(int argc, char *argv[])
    {
        int *list, *new_list;

        fprintf (stderr,"Initializing OCAML\n");
       caml_main(argv);
       fprintf (stderr,"Initializing OCAML Done\n");
       list = (int *) calloc(10, sizeof(int));
       new_list = call_caml_simple_list_test(list);
    /* I expect eleven elements in list after the call to ocaml and expect
    100
         to be printed out */
       printf("The last element is %d\n", new_list[10]);
    }

    int * call_caml_simple_list_test(int *list)
    {
       static value * closure_f = NULL;
       value ret_val;

          if (closure_f == NULL) {
             closure_f = caml_named_value("simple_list_test");
       }
       ret_val = callback(*closure_f, (value) list);
       return (int *)ret_val;
    }
    **********************End C side*****************

    My understanding (from documentation) is that since "list" is allocated
    on the "C" side, it is outside the heap of the ocaml garbage collector
    and
    all I have to do is to cast the pointer to a caml 'value' type.
    I get a core dump (segmentation fault) with the above code.
    How can I modify or extend the list (or for that matter, any record)
    on the OCAML side and then send the C side back a pointer that I can
    dereference.
    Thanx.

    --
    **************************************************
    Narayanan Krishnamurthy (Nari)
    The Somerset PowerPC Design Center,
    Architecture and Systems Platforms
    Motorola Inc. Semiconductor Products Sector
    7700 W. Parmer Lane, Austin, TX 78729
    

    Loc/MD: TX32/PL30 _ email : nari@ibmoto.com / \ email: r44117@email.mot.com Ph : (512) 996-4863 |O O| Fax : (512) 996-7432 ************************| I |********************** \ o / ---



    This archive was generated by hypermail 2b29 : Mon Feb 07 2000 - 10:33:41 MET