X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=perl_c.c;h=ce5366722ee07171212957e3e9accb4e28abdebe;hb=36b9a44ab49471646b7a3548d1e2d28c015063ad;hp=0d3beefa39a907bcec33d43f01df8b22bd65c484;hpb=d8c285c416427e018ab00c4b54d7c30d598e2bc5;p=perl4caml.git diff --git a/perl_c.c b/perl_c.c index 0d3beef..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.24 2006-12-27 14:00: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 @@ -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