X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=perl.ml;h=7069d35360617fee5c7b5ce2cde5f4b5f3f96a80;hb=1c369c3ba6b71d4524dfacd0ba3554e8a524ed57;hp=b8c10127699fa0ca46f2e7000a26ef3edeb89d2f;hpb=ca5c0933addc2b872316df28789f7de81281c3fe;p=perl4caml.git diff --git a/perl.ml b/perl.ml index b8c1012..7069d35 100644 --- a/perl.ml +++ b/perl.ml @@ -1,6 +1,6 @@ (* Interface to Perl from OCaml. * Copyright (C) 2003 Merjis Ltd. - * $Id: perl.ml,v 1.3 2003-10-12 11:56:26 rich Exp $ + * $Id: perl.ml,v 1.4 2003-10-12 17:33:14 rich Exp $ *) type t @@ -9,17 +9,17 @@ type sv exception Perl_failure of string -external init : unit -> unit = "perl4caml_init" -let () = +external c_init : unit -> unit = "perl4caml_init" +let init () = Callback.register_exception "perl4caml_perl_failure" (Perl_failure ""); - init () (* Initialise C code. *) + c_init () (* Initialise C code. *) + +external destroy : unit -> unit + = "perl4caml_destroy" external create : ?args:string array -> unit -> t = "perl4caml_create" -external destroy : t -> unit - = "perl4caml_destroy" - external set_context : t -> unit = "perl4caml_set_context" @@ -31,13 +31,30 @@ external string_of_sv : sv -> string = "perl4caml_string_of_sv" external sv_of_string : string -> sv = "perl4caml_sv_of_string" external sv_is_true : sv -> bool = "perl4caml_sv_is_true" external sv_is_undef : sv -> bool = "perl4caml_sv_is_undef" -external sv_get_undef : unit -> sv = "perl4caml_sv_get_undef" -external sv_get_yes : unit -> sv = "perl4caml_sv_get_yes" -external sv_get_no : unit -> sv = "perl4caml_sv_get_no" +external sv_undef : unit -> sv = "perl4caml_sv_undef" +external sv_yes : unit -> sv = "perl4caml_sv_yes" +external sv_no : unit -> sv = "perl4caml_sv_no" + +let sv_true () = sv_of_int 1 +let sv_false () = sv_of_int 0 + +let bool_of_sv = sv_is_true +let sv_of_bool b = if b then sv_true () else sv_false () + +type sv_t = SVt_NULL + | SVt_IV + | SVt_NV + | SVt_PV + | SVt_RV + | SVt_PVAV + | SVt_PVHV + | SVt_PVCV + | SVt_PVGV + | SVt_PVMG + +external sv_type : sv -> sv_t = "perl4caml_sv_type" -let sv_undef = sv_get_undef () -let sv_true = sv_get_yes () -let sv_false = sv_get_no () +external deref : sv -> sv = "perl4caml_deref" external get_sv : ?create:bool -> string -> sv = "perl4caml_get_sv"