[Rd] R_NilValue and segfault.
    Guillaume Yziquel 
    guillaume.yziquel at citycable.ch
       
    Wed Nov 18 02:45:53 CET 2009
    
    
  
Hello.
I've been trying to wrap up the R_NilValue into OCaml-R. I nevertheless 
get a segfault.
As I gathered, R_NilValue is declared in Rinternals.h:
> /* Special Values */
> LibExtern SEXP  R_NilValue;         /* The nil object */
> LibExtern SEXP  R_UnboundValue;     /* Unbound marker */
> LibExtern SEXP  R_MissingArg;       /* Missing argument marker */
So, in my r_data.c file, I have:
-1- an #include directive.
> #include <Rinternals.h>
-2- the function wrapping R data in OCaml data
> CAMLprim value Val_sexp (SEXP sexp)
> {
>   CAMLparam0();
>   CAMLlocal1(result);
>   result = caml_alloc(1, Abstract_tag);
>   Field(result, 0) = (value) sexp;
>     /* Do not use Val_long in the above statement,
>        as it will drop the top bit. See mlvalues.h. */
>   CAMLreturn(result);
> }
and a function taking no argument (in the sense of OCaml), and returning 
an OCaml object encapsulating a pointer which is R_NilValue. (R_NilValue 
is already a pointer, so we just copy it).
> /* The NULL constant in R... */
> 
> CAMLprim value r_null (value unit) {
>   CAMLparam1(unit);
>   CAMLreturn(Val_sexp(R_NilValue));
> }
OCaml code is straightforward:
> external null_creator : unit -> sexp = "r_null"
> let null = null_creator ()
And I get a segfault:
>         Objective Caml version 3.11.1
> 
> # R.sexptype (R.sexp "1");;
> - : R.sexptype = R.RealSxp
> # R.sexptype Quantmod.getSymbols;;
> - : R.sexptype = R.PromSxp
The two above are fine, but inspecting the type of R.null gives me a 
segfault.
> # R.sexptype R.null;;
> /usr/bin/ocaml-batteries: line 2:  3723 Erreur de segmentation  "/usr/lib/ocaml/batteries/toplevel.top" "/usr/lib/ocaml/batteries/top.ml" $@
Please tell me if there's anything obvious which causes this. There's a 
lot of conditional compilation directives in Rinternals.h, and I'm 
wondering whether or not that might be an issue.
All the best,
-- 
      Guillaume Yziquel
http://yziquel.homelinux.org/
    
    
More information about the R-devel
mailing list