7069d35360617fee5c7b5ce2cde5f4b5f3f96a80
[perl4caml.git] / perl.ml
1 (* Interface to Perl from OCaml.
2  * Copyright (C) 2003 Merjis Ltd.
3  * $Id: perl.ml,v 1.4 2003-10-12 17:33:14 rich Exp $
4  *)
5
6 type t
7
8 type sv
9
10 exception Perl_failure of string
11
12 external c_init : unit -> unit = "perl4caml_init"
13 let init () =
14   Callback.register_exception "perl4caml_perl_failure" (Perl_failure "");
15   c_init ()                             (* Initialise C code. *)
16
17 external destroy : unit -> unit
18   = "perl4caml_destroy"
19
20 external create : ?args:string array -> unit -> t
21   = "perl4caml_create"
22
23 external set_context : t -> unit
24   = "perl4caml_set_context"
25
26 external int_of_sv : sv -> int = "perl4caml_int_of_sv"
27 external sv_of_int : int -> sv = "perl4caml_sv_of_int"
28 external float_of_sv : sv -> int = "perl4caml_float_of_sv"
29 external sv_of_float : int -> sv = "perl4caml_sv_of_float"
30 external string_of_sv : sv -> string = "perl4caml_string_of_sv"
31 external sv_of_string : string -> sv = "perl4caml_sv_of_string"
32 external sv_is_true : sv -> bool = "perl4caml_sv_is_true"
33 external sv_is_undef : sv -> bool = "perl4caml_sv_is_undef"
34 external sv_undef : unit -> sv = "perl4caml_sv_undef"
35 external sv_yes : unit -> sv = "perl4caml_sv_yes"
36 external sv_no : unit -> sv = "perl4caml_sv_no"
37
38 let sv_true () = sv_of_int 1
39 let sv_false () = sv_of_int 0
40
41 let bool_of_sv = sv_is_true
42 let sv_of_bool b = if b then sv_true () else sv_false ()
43
44 type sv_t    = SVt_NULL
45              | SVt_IV
46              | SVt_NV
47              | SVt_PV
48              | SVt_RV
49              | SVt_PVAV
50              | SVt_PVHV
51              | SVt_PVCV
52              | SVt_PVGV
53              | SVt_PVMG
54
55 external sv_type : sv -> sv_t = "perl4caml_sv_type"
56
57 external deref : sv -> sv = "perl4caml_deref"
58
59 external get_sv : ?create:bool -> string -> sv = "perl4caml_get_sv"
60
61 external call : ?sv:sv -> ?fn:string -> sv list -> sv
62   = "perl4caml_call"
63 external call_array : ?sv:sv -> ?fn:string -> sv list -> sv list
64   = "perl4caml_call_array"
65 external call_void : ?sv:sv -> ?fn:string -> sv list -> unit
66   = "perl4caml_call_void"
67
68 external eval : string -> sv
69   = "perl4caml_eval"
70
71 external call_method : sv -> string -> sv list -> sv
72   = "perl4caml_call_method"
73 external call_method_array : sv -> string -> sv list -> sv list
74   = "perl4caml_call_method_array"
75 external call_method_void : sv -> string -> sv list -> unit
76   = "perl4caml_call_method_void"
77 external call_class_method : string -> string -> sv list -> sv
78   = "perl4caml_call_class_method"
79 external call_class_method_array : string -> string -> sv list -> sv list
80   = "perl4caml_call_class_method_array"
81 external call_class_method_void : string -> string -> sv list -> unit
82   = "perl4caml_call_class_method_void"