/* 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 <stdio.h>
perl4caml_sv_of_float (value fv)
{
CAMLparam1 (fv);
- CAMLreturn (Val_sv (newSViv (Double_val (fv))));
+ CAMLreturn (Val_sv (newSVnv (Double_val (fv))));
}
CAMLprim value
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;
case SVt_IV:
case SVt_NV:
case SVt_PV:
+#if PERL_VERSION < 11
case SVt_RV:
+#endif
case SVt_PVMG:
break;
default:
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);
caml_raise_with_arg (*caml_named_value ("perl4caml_perl_failure"), errv);
}
+
+ CAMLreturn0;
}
CAMLprim value