X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=perl.ml;h=a82755b0cec9d1ac28ed8a748c573d75c907f2ae;hb=9e543055271a1ec799d56f507ab048c78d3d7a88;hp=7069d35360617fee5c7b5ce2cde5f4b5f3f96a80;hpb=1c369c3ba6b71d4524dfacd0ba3554e8a524ed57;p=perl4caml.git diff --git a/perl.ml b/perl.ml index 7069d35..a82755b 100644 --- a/perl.ml +++ b/perl.ml @@ -1,11 +1,12 @@ (* Interface to Perl from OCaml. * Copyright (C) 2003 Merjis Ltd. - * $Id: perl.ml,v 1.4 2003-10-12 17:33:14 rich Exp $ + * $Id: perl.ml,v 1.5 2003-10-14 16:05:21 rich Exp $ *) type t type sv +type av exception Perl_failure of string @@ -54,9 +55,43 @@ type sv_t = SVt_NULL external sv_type : sv -> sv_t = "perl4caml_sv_type" +let string_of_sv_t = function + SVt_NULL -> "SVt_NULL" + | SVt_IV -> "SVt_IV" + | SVt_NV -> "SVt_NV" + | SVt_PV -> "SVt_PV" + | SVt_RV -> "SVt_RV" + | SVt_PVAV -> "SVt_PVAV" + | SVt_PVHV -> "SVt_PVHV" + | SVt_PVCV -> "SVt_PVCV" + | SVt_PVGV -> "SVt_PVGV" + | SVt_PVMG -> "SVt_PVMG" + external deref : sv -> sv = "perl4caml_deref" +external deref_array : sv -> av = "perl4caml_deref_array" + +external av_empty : unit -> av = "perl4caml_av_empty" +external av_of_sv_list : sv list -> av = "perl4caml_av_of_sv_list" +external av_push : av -> sv -> unit = "perl4caml_av_push" +external av_pop : av -> sv = "perl4caml_av_pop" +external av_shift : av -> sv = "perl4caml_av_shift" +external av_unshift : av -> sv -> unit = "perl4caml_av_unshift" +external av_length : av -> int = "perl4caml_av_length" +external av_set : av -> int -> sv -> unit = "perl4caml_av_set" +external av_get : av -> int -> sv = "perl4caml_av_get" +external av_clear : av -> unit = "perl4caml_av_clear" +external av_undef : av -> unit = "perl4caml_av_undef" +external av_extend : av -> int -> unit = "perl4caml_av_extend" + +let av_map f av = + let list = ref [] in + for i = 0 to av_length av - 1 do + list := f (av_get av i) :: !list + done; + List.rev !list external get_sv : ?create:bool -> string -> sv = "perl4caml_get_sv" +external get_av : ?create:bool -> string -> av = "perl4caml_get_av" external call : ?sv:sv -> ?fn:string -> sv list -> sv = "perl4caml_call"