X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=perl_c.c;h=ce5366722ee07171212957e3e9accb4e28abdebe;hb=36b9a44ab49471646b7a3548d1e2d28c015063ad;hp=1a6b1efa68101188b38c48a6353d0bda86e45a08;hpb=2e1b60f9fffb9eddae136a233bf875a23022fa24;p=perl4caml.git diff --git a/perl_c.c b/perl_c.c index 1a6b1ef..ce53667 100644 --- a/perl_c.c +++ b/perl_c.c @@ -1,6 +1,22 @@ /* Interface to Perl from OCaml. - * Copyright (C) 2003 Merjis Ltd. - * $Id: perl_c.c,v 1.23 2005-04-14 13:05:12 rich Exp $ + Copyright (C) 2003 Merjis Ltd. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + $Id: perl_c.c,v 1.25 2008-03-01 13:02:21 rich Exp $ */ #include @@ -117,7 +133,7 @@ CAMLprim value perl4caml_sv_of_float (value fv) { CAMLparam1 (fv); - CAMLreturn (Val_sv (newSViv (Double_val (fv)))); + CAMLreturn (Val_sv (newSVnv (Double_val (fv)))); } CAMLprim value @@ -183,12 +199,17 @@ perl4caml_sv_no (value unit) static int sv_type (SV *sv) { +#if PERL_VERSION >= 11 + if (SvROK(sv)) return 4; +#endif switch (SvTYPE (sv)) { case SVt_IV: return 1; case SVt_NV: return 2; case SVt_PV: return 3; +#if PERL_VERSION < 11 case SVt_RV: return 4; +#endif case SVt_PVAV: return 5; case SVt_PVHV: return 6; case SVt_PVCV: return 7; @@ -286,7 +307,9 @@ perl4caml_deref (value svv) case SVt_IV: case SVt_NV: case SVt_PV: +#if PERL_VERSION < 11 case SVt_RV: +#endif case SVt_PVMG: break; default: @@ -696,11 +719,13 @@ perl4caml_get_hv (value optcreate, value name) static inline void check_perl_failure () { + CAMLparam0 (); + CAMLlocal1 (errv); + SV *errsv = get_sv ("@", TRUE); if (SvTRUE (errsv)) /* Equivalent of $@ in Perl. */ { - CAMLlocal1 (errv); STRLEN n_a; const char *err = SvPV (errsv, n_a); @@ -708,6 +733,8 @@ check_perl_failure () caml_raise_with_arg (*caml_named_value ("perl4caml_perl_failure"), errv); } + + CAMLreturn0; } CAMLprim value