Hello.

I've now added some support to OCaml-R in order to investigate low-level structures. See below for an output, concerning 'str'.

But I'm having an issue concerning SEXPs with type SYMSXP.

      lazy
       {content =
         SYMSXP
          {pname = lazy {content = NILSXP};
           sym_value =
            lazy
             {content =
               SYMSXP
                {pname = lazy {content = NILSXP};
                 sym_value =
                  lazy
                   {content =
                     SYMSXP
                      {pname = <lazy>; sym_value = <lazy>; internal = <lazy>}};
                 internal = lazy {content = NILSXP}}};
           internal = lazy {content = NILSXP}}};

It seems that the sym_value of a SYMSXP is a SYMSXP. But apparently they seem to be different structures, as the pointers pointing to these structures (the parent SYMSXP and the child SYMSXP) give different addresses...

So I'm wondering: what's the structure of SYMSXPs? Is its sym_value always a SYMSXP? I guess not. When its sym_value is a SYMSXP, is it pointing to itself?

All the best,

Guillaume Yziquel.


# t;;
- : R.Internal.t = <lazy>
# unfold 1 t;;
- : unit = ()
# t;;
- : R.Internal.t =
lazy {content = PROMSXP {prom_value = <lazy>; expr = <lazy>; env = <lazy>}}
# unfold 2 t;;
- : unit = ()
# t;;
- : R.Internal.t =
lazy
 {content =
   PROMSXP
    {prom_value =
      lazy
       {content =
         SYMSXP {pname = <lazy>; sym_value = <lazy>; internal = <lazy>}};
     expr =
      lazy
       {content = LANGSXP {carval = <lazy>; cdrval = <lazy>; tagval = <lazy>}};
     env = lazy {content = ENVSXP}}}
# unfold 3 t;;
- : unit = ()
# t;;
- : R.Internal.t =
lazy
 {content =
   PROMSXP
    {prom_value =
      lazy
       {content =
         SYMSXP
          {pname = lazy {content = NILSXP};
           sym_value =
            lazy
             {content =
               SYMSXP {pname = <lazy>; sym_value = <lazy>; internal = <lazy>}};
           internal = lazy {content = NILSXP}}};
     expr =
      lazy
       {content =
         LANGSXP
          {carval =
            lazy
             {content =
               SYMSXP {pname = <lazy>; sym_value = <lazy>; internal = <lazy>}};
           cdrval =
            lazy
             {content =
               LISTSXP {carval = <lazy>; cdrval = <lazy>; tagval = <lazy>}};
           tagval = lazy {content = NILSXP}}};
     env = lazy {content = ENVSXP}}}
# unfold 4 t;;
- : unit = ()
# t;;
- : R.Internal.t =
lazy
 {content =
   PROMSXP
    {prom_value =
      lazy
       {content =
         SYMSXP
          {pname = lazy {content = NILSXP};
           sym_value =
            lazy
             {content =
               SYMSXP
                {pname = lazy {content = NILSXP};
                 sym_value =
                  lazy
                   {content =
                     SYMSXP
                      {pname = <lazy>; sym_value = <lazy>; internal = <lazy>}};
                 internal = lazy {content = NILSXP}}};
           internal = lazy {content = NILSXP}}};
     expr =
      lazy
       {content =
         LANGSXP
          {carval =
            lazy
             {content =
               SYMSXP
                {pname = lazy {content = CHARSXP};
                 sym_value = lazy {content = BUILTINSXP};
                 internal = lazy {content = NILSXP}}};
           cdrval =
            lazy
             {content =
               LISTSXP
                {carval = lazy {content = INTSXP};
                 cdrval =
                  lazy
                   {content =
                     LISTSXP
                      {carval = <lazy>; cdrval = <lazy>; tagval = <lazy>}};
                 tagval = lazy {content = NILSXP}}};
           tagval = lazy {content = NILSXP}}};
     env = lazy {content = ENVSXP}}}


--
     Guillaume Yziquel
http://yziquel.homelinux.org/

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to