Merge pull request #1473 from ZackerySpytz/OCaml-wrapmacro-test

[OCaml] Fix the wrapmacro test
This commit is contained in:
William S Fulton 2019-02-18 19:33:22 +00:00 • committed by GitHub
commit f19882ed51
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 58 additions and 10 deletions

View file

@ -3711,7 +3711,7 @@ Below are some practical steps that should help meet these requirements.
</li> </li>
<li> <li>
Copying an existing language module and adapting the source for it is likely to be the most efficient Copying an existing language module and adapting the source for it is likely to be the most efficient
approach to fully developing a new module as a numbe of corner cases are covered in the existing implementations. approach to fully developing a new module as a number of corner cases are covered in the existing implementations.
The most advanced scripting languages are Python and Ruby. The most advanced scripting languages are Python and Ruby.
The most advanced compiled target languages are Java and C#. The most advanced compiled target languages are Java and C#.
</li> </li>

View file

@ -1,13 +1,13 @@
/* File : example.i */ /* File : example.i */
%module example %module example
%typemap(argout) (int &x, int &y) { %typemap(argout) (const int &x, const int &y) {
swig_result = caml_list_append(swig_result, caml_val_int(*$1)); swig_result = caml_list_append(swig_result, caml_val_int(*$1));
swig_result = caml_list_append(swig_result, caml_val_int(*$2)); swig_result = caml_list_append(swig_result, caml_val_int(*$2));
} }
%{ %{
extern "C" void factor(int &x, int &y); extern "C" void factor(const int &x, const int &y);
%} %}
extern "C" void factor(int &x, int &y); extern "C" void factor(const int &x, const int &y);

View file

@ -0,0 +1,15 @@
open Swig
open Global_vars
_init '()
let _ =
assert (_b '() as string = "string b");
assert (_b '("a string value") as string = "a string value");
assert (_b '() as string = "a string value");
assert (_x '() as int = 1234);
assert (_x '(9876) as int = 9876);
assert (_x '() as int = 9876);
assert (_Hi '() as int = 0);
assert (_Hola '() as int = 1);
;;

View file

@ -0,0 +1,10 @@
open Swig
open Sizet
let _ =
let s = C_int64 2000L in
assert (_test1 '(s) as int = 2000);
assert (_test2 '(s) as int = 2000);
assert (_test3 '(s) as int = 2000);
assert (_test4 '(s) as int = 2000);
;;

View file

@ -0,0 +1,11 @@
open Swig
open Typedef_reference
let _ =
let i = _copy_intp '(2) in
assert (_somefunc '(i) as int = 2);
assert (_delete_intp '(i) = C_void);
let i = _copy_intp '(3) in
assert (_otherfunc '(i) as int = 3);
assert (_delete_intp '(i) = C_void);
;;

View file

@ -0,0 +1,10 @@
open Swig
open Wrapmacro
let _ =
let args = C_list [ C_int64 2L ; C_int64 1L ] in
assert (_maximum '(args) as int = 2);
let args = C_list [ C_double (2. /. 7.) ; C_double 256. ] in
assert (_maximum '(args) as float = 256.);
assert (_GUINT16_SWAP_LE_BE_CONSTANT '(0x1234) as int = 0x3412);
;;

View file

@ -7,6 +7,7 @@
%include <std/std_except.i> %include <std/std_except.i>
%apply size_t { std::size_t }; %apply size_t { std::size_t };
%apply const size_t& { const std::size_t& };
%{ %{
#include <string> #include <string>

View file

@ -72,7 +72,8 @@
long, signed long, unsigned long, long, signed long, unsigned long,
long long, signed long long, unsigned long long, long long, signed long long, unsigned long long,
const long &, const signed long &, const unsigned long &, const long &, const signed long &, const unsigned long &,
const long long &, const signed long long &, const unsigned long long & const long long &, const signed long long &, const unsigned long long &,
size_t, const size_t &
{ {
if( !Is_block($input) ) $1 = 0; if( !Is_block($input) ) $1 = 0;
else { else {

View file

@ -132,11 +132,11 @@
%typemap(varin) C_NAME { %typemap(varin) C_NAME {
$1 = OCAML_TO_C($input); $1 = OCAML_TO_C($input);
} }
%typemap(in) C_NAME & ($*1_ltype temp) { %typemap(in) const C_NAME & ($*1_ltype temp) {
temp = ($*1_ltype) OCAML_TO_C($input); temp = ($*1_ltype) OCAML_TO_C($input);
$1 = &temp; $1 = &temp;
} }
%typemap(varin) C_NAME & { %typemap(varin) const C_NAME & {
$1 = OCAML_TO_C($input); $1 = OCAML_TO_C($input);
} }
%typemap(directorout) C_NAME { %typemap(directorout) C_NAME {
@ -156,13 +156,13 @@
%typemap(varout) C_NAME { %typemap(varout) C_NAME {
$result = C_TO_OCAML($1); $result = C_TO_OCAML($1);
} }
%typemap(varout) C_NAME & { %typemap(varout) const C_NAME & {
$result = C_TO_OCAML($1); $result = C_TO_OCAML($1);
} }
%typemap(argout) C_NAME *OUTPUT { %typemap(argout) C_NAME *OUTPUT {
swig_result = caml_list_append(swig_result, C_TO_OCAML((long)*$1)); swig_result = caml_list_append(swig_result, C_TO_OCAML((long)*$1));
} }
%typemap(out) C_NAME & { %typemap(out) const C_NAME & {
$result = C_TO_OCAML(*$1); $result = C_TO_OCAML(*$1);
} }
%typemap(directorin) C_NAME { %typemap(directorin) C_NAME {