Sorry i haven't been here in a while.
camlp4 bug was caught by Michael Ethier <methier@cgr.harvard.edu> - director.swg: fix a typo - ocamldec.swg, ocaml.swg: new macros - ac_compare_version.m4: arty's own more liberally licensed version compare autoconf macro. - configure.in: use version_compare and make swigp4.ml generated by configure based on ocaml version. This is due to an incompatible change in camlp4. - ocaml.cxx: use new return macros in the right places (returning non-value) git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@9518 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
b21e03617d
commit
8ad7605f16
7 changed files with 159 additions and 78 deletions
|
|
@ -40,7 +40,7 @@ namespace Swig {
|
|||
/* attempt to call a pure virtual method via a director method */
|
||||
class DirectorPureVirtualException : public Swig::DirectorException {
|
||||
public:
|
||||
DirectorTypeMismatchException(const char* msg="") {
|
||||
DirectorPureVirtualException(const char* msg="") {
|
||||
}
|
||||
|
||||
static void raise(const char *msg) {
|
||||
|
|
|
|||
|
|
@ -429,15 +429,15 @@ extern "C" {
|
|||
case C_short:
|
||||
case C_ushort:
|
||||
case C_int:
|
||||
CAMLreturn(Int_val(SWIG_Field(v,0)));
|
||||
CAMLreturn_type(Int_val(SWIG_Field(v,0)));
|
||||
case C_uint:
|
||||
case C_int32:
|
||||
CAMLreturn(Int32_val(SWIG_Field(v,0)));
|
||||
CAMLreturn_type(Int32_val(SWIG_Field(v,0)));
|
||||
case C_int64:
|
||||
CAMLreturn(SWIG_Int64_val(SWIG_Field(v,0)));
|
||||
CAMLreturn_type(SWIG_Int64_val(SWIG_Field(v,0)));
|
||||
case C_float:
|
||||
case C_double:
|
||||
CAMLreturn(Double_val(SWIG_Field(v,0)));
|
||||
CAMLreturn_type(Double_val(SWIG_Field(v,0)));
|
||||
default:
|
||||
fprintf( stderr, "Unknown block tag %d\n", SWIG_Tag_val(v) );
|
||||
failwith("No conversion to double");
|
||||
|
|
@ -487,13 +487,13 @@ extern "C" {
|
|||
}
|
||||
|
||||
SWIGSTATIC void *caml_ptr_val( CAML_VALUE v, swig_type_info *descriptor ) {
|
||||
CAMLparam0();
|
||||
CAMLparam0();
|
||||
#ifdef TYPE_CAST_VERBOSE
|
||||
caml_print_val( v );
|
||||
#endif
|
||||
void *out = NULL;
|
||||
if( !caml_ptr_val_internal( v, &out, descriptor ) )
|
||||
CAMLreturn(out);
|
||||
CAMLreturn_type(out);
|
||||
else
|
||||
failwith( "No appropriate conversion found." );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,6 +75,34 @@ SWIGEXT {
|
|||
/* Also an l-value. */
|
||||
#endif
|
||||
|
||||
#ifdef CAMLreturn0
|
||||
#undef CAMLreturn0
|
||||
#endif
|
||||
#define CAMLreturn0 do{ \
|
||||
caml_local_roots = caml__frame; \
|
||||
return; \
|
||||
}while (0)
|
||||
|
||||
#ifdef CAMLreturn
|
||||
#undef CAMLreturn
|
||||
#endif
|
||||
#define CAMLreturn(result) do{ \
|
||||
caml_value_t caml__temp_result = (result); \
|
||||
caml_local_roots = caml__frame; \
|
||||
return (caml__temp_result); \
|
||||
}while(0)
|
||||
|
||||
#define CAMLreturn_type(result) do{ \
|
||||
caml_local_roots = caml__frame; \
|
||||
return result; \
|
||||
}while(0)
|
||||
|
||||
#ifdef CAMLnoreturn
|
||||
#undef CAMLnoreturn
|
||||
#endif
|
||||
#define CAMLnoreturn ((void) caml__frame)
|
||||
|
||||
|
||||
#ifndef ARCH_ALIGN_INT64
|
||||
#define SWIG_Int64_val(v) (*((int64 *) SWIG_Data_custom_val(v)))
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
open Pcaml ;;
|
||||
|
||||
let lap x y = x :: y
|
||||
let c_ify e loc =
|
||||
let c_ify e @OCAMLLOC@ =
|
||||
match e with
|
||||
<:expr< $int:_$ >> -> <:expr< (C_int $e$) >>
|
||||
| <:expr< $str:_$ >> -> <:expr< (C_string $e$) >>
|
||||
|
|
@ -10,44 +10,44 @@ let c_ify e loc =
|
|||
| <:expr< True >> -> <:expr< (C_bool $e$) >>
|
||||
| <:expr< False >> -> <:expr< (C_bool $e$) >>
|
||||
| _ -> <:expr< $e$ >>
|
||||
let mk_list args loc f =
|
||||
let rec mk_list_inner args loc f =
|
||||
let mk_list args @OCAMLLOC@ f =
|
||||
let rec mk_list_inner args @OCAMLLOC@ f =
|
||||
match args with
|
||||
[] -> <:expr< [] >>
|
||||
| x :: xs ->
|
||||
(let loc = MLast.loc_of_expr x in
|
||||
<:expr< [ ($f x loc$) ] @ ($mk_list_inner xs loc f$) >>) in
|
||||
(let @OCAMLLOC@ = MLast.loc_of_expr x in
|
||||
<:expr< [ ($f x @OCAMLLOC@$) ] @ ($mk_list_inner xs @OCAMLLOC@ f$) >>) in
|
||||
match args with
|
||||
[] -> <:expr< (Obj.magic C_void) >>
|
||||
| [ a ] -> <:expr< (Obj.magic $f a loc$) >>
|
||||
| _ -> <:expr< (Obj.magic (C_list ($mk_list_inner args loc f$))) >>
|
||||
| [ a ] -> <:expr< (Obj.magic $f a @OCAMLLOC@$) >>
|
||||
| _ -> <:expr< (Obj.magic (C_list ($mk_list_inner args @OCAMLLOC@ f$))) >>
|
||||
|
||||
EXTEND
|
||||
expr:
|
||||
[ [ e1 = expr ; "'" ; "[" ; e2 = expr ; "]" ->
|
||||
<:expr< (invoke $e1$) "[]" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "[]" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "->" ; l = LIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
|
||||
<:expr< (invoke $e1$) $str:l$ ($mk_list args loc c_ify$) >>
|
||||
<:expr< (invoke $e1$) $str:l$ ($mk_list args @OCAMLLOC@ c_ify$) >>
|
||||
| e1 = expr ; "->" ; u = UIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
|
||||
<:expr< (invoke $e1$) $str:u$ ($mk_list args loc c_ify$) >>
|
||||
<:expr< (invoke $e1$) $str:u$ ($mk_list args @OCAMLLOC@ c_ify$) >>
|
||||
| e1 = expr ; "->" ; s = expr LEVEL "simple" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
|
||||
<:expr< (invoke $e1$) $s$ ($mk_list args loc c_ify$) >>
|
||||
<:expr< (invoke $e1$) $s$ ($mk_list args @OCAMLLOC@ c_ify$) >>
|
||||
| e1 = expr ; "'" ; "." ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
|
||||
<:expr< (invoke $e1$) "()" ($mk_list args loc c_ify$) >>
|
||||
<:expr< (invoke $e1$) "()" ($mk_list args @OCAMLLOC@ c_ify$) >>
|
||||
| e1 = expr ; "'" ; "->" ; l = LIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
|
||||
<:expr< (invoke ((invoke $e1$) "->" C_void)) $str:l$ ($mk_list args loc c_ify$) >>
|
||||
<:expr< (invoke ((invoke $e1$) "->" C_void)) $str:l$ ($mk_list args @OCAMLLOC@ c_ify$) >>
|
||||
| e1 = expr ; "'" ; "->" ; u = UIDENT ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
|
||||
<:expr< (invoke ((invoke $e1$) "->" C_void)) $str:u$ ($mk_list args loc c_ify$) >>
|
||||
<:expr< (invoke ((invoke $e1$) "->" C_void)) $str:u$ ($mk_list args @OCAMLLOC@ c_ify$) >>
|
||||
| e1 = expr ; "'" ; "->" ; s = expr LEVEL "simple" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
|
||||
<:expr< (invoke ((invoke $e1$) "->" C_void)) $s$ ($mk_list args loc c_ify$) >>
|
||||
<:expr< (invoke ((invoke $e1$) "->" C_void)) $s$ ($mk_list args @OCAMLLOC@ c_ify$) >>
|
||||
| e1 = expr ; "'" ; "++" ->
|
||||
<:expr< (invoke $e1$) "++" C_void >>
|
||||
| e1 = expr ; "'" ; "--" ->
|
||||
<:expr< (invoke $e1$) "--" C_void >>
|
||||
| e1 = expr ; "'" ; "-" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "-" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
| e1 = expr ; "'" ; "+" ; e2 = expr -> <:expr< (invoke $e1$) "+" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
| e1 = expr ; "'" ; "*" ; e2 = expr -> <:expr< (invoke $e1$) "*" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "-" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "+" ; e2 = expr -> <:expr< (invoke $e1$) "+" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "*" ; e2 = expr -> <:expr< (invoke $e1$) "*" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| "'" ; "&" ; e1 = expr ->
|
||||
<:expr< (invoke $e1$) "&" C_void >>
|
||||
| "'" ; "!" ; e1 = expr ->
|
||||
|
|
@ -55,64 +55,64 @@ EXTEND
|
|||
| "'" ; "~" ; e1 = expr ->
|
||||
<:expr< (invoke $e1$) "~" C_void >>
|
||||
| e1 = expr ; "'" ; "/" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "/" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "/" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "%" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "%" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "%" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "lsl" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) ("<" ^ "<") (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) ("<" ^ "<") (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "lsr" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) (">" ^ ">") (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) (">" ^ ">") (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "<" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "<" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "<" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "<=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "<=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "<=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; ">" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) ">" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) ">" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; ">=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) ">=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) ">=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "==" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "==" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "==" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "!=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "!=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "!=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "&" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "&" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "&" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "^" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "^" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "^" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "|" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "|" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "|" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "&&" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "&&" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "&&" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "||" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "||" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "||" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "+=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "+=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "+=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "-=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "-=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "-=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "*=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "*=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "*=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "/=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "/=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "/=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "%=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "%=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "%=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "lsl" ; "=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) ("<" ^ "<=") (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) ("<" ^ "<=") (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "lsr" ; "=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) (">" ^ ">=") (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) (">" ^ ">=") (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "&=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "&=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "&=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "^=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "^=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
<:expr< (invoke $e1$) "^=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| e1 = expr ; "'" ; "|=" ; e2 = expr ->
|
||||
<:expr< (invoke $e1$) "|=" (C_list [ $c_ify e2 loc$ ]) >>
|
||||
| "'" ; e = expr -> c_ify e loc
|
||||
<:expr< (invoke $e1$) "|=" (C_list [ $c_ify e2 @OCAMLLOC@$ ]) >>
|
||||
| "'" ; e = expr -> c_ify e @OCAMLLOC@
|
||||
| c = expr ; "as" ; id = LIDENT -> <:expr< $lid:"get_" ^ id$ $c$ >>
|
||||
| c = expr ; "to" ; id = LIDENT -> <:expr< $uid:"C_" ^ id$ $c$ >>
|
||||
| "`" ; "`" ; l = LIDENT -> <:expr< C_enum `$lid:l$ >>
|
||||
| "`" ; "`" ; u = UIDENT -> <:expr< C_enum `$uid:u$ >>
|
||||
| f = expr ; "'" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" ->
|
||||
<:expr< $f$ ($mk_list args loc c_ify$) >>
|
||||
<:expr< $f$ ($mk_list args @OCAMLLOC@ c_ify$) >>
|
||||
] ] ;
|
||||
END ;;
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue