Added to typemaps: reference type in/out
Strings <=> std::string by value std::wstring accessible from Ocaml. The string example converts a multibyte japanese EUC sequence to a single wchar_t sequence if you have the ja_JP.EUC-JP locale, or similar. Better handling of reference in types Corrected problems with & * mismatch in type verifier. Type verifier now really functional. No more type errors in places they wouldn't be allowed in C++, unless you work at it. Added argout_ref example for argout_ref. Init code now effective (called from let _ = f_<module>_init ()) git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4412 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
cfe7be1eed
commit
b8490f9c18
10 changed files with 190 additions and 58 deletions
|
|
@ -205,18 +205,18 @@ public:
|
|||
|
||||
Printv(mlfile,module,".ml",NIL);
|
||||
Printv(mlifile,module,".mli",NIL);
|
||||
|
||||
String *mlfilen = NewStringf("%s%s", Swig_file_dirname(outfile),mlfile);
|
||||
if ((f_mlout = NewFile(mlfilen,"w")) == 0) {
|
||||
Printf(stderr,"Unable to open %s\n", mlfilen);
|
||||
SWIG_exit (EXIT_FAILURE);
|
||||
}
|
||||
String *mlifilen = NewStringf("%s%s", Swig_file_dirname(outfile),mlifile);
|
||||
if ((f_mliout = NewFile(mlifilen,"w")) == 0) {
|
||||
Printf(stderr,"Unable to open %s\n", mlifilen);
|
||||
SWIG_exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
String *mlfilen = NewStringf("%s%s", Swig_file_dirname(outfile),mlfile);
|
||||
if ((f_mlout = NewFile(mlfilen,"w")) == 0) {
|
||||
Printf(stderr,"Unable to open %s\n", mlfilen);
|
||||
SWIG_exit (EXIT_FAILURE);
|
||||
}
|
||||
String *mlifilen = NewStringf("%s%s", Swig_file_dirname(outfile),mlifile);
|
||||
if ((f_mliout = NewFile(mlifilen,"w")) == 0) {
|
||||
Printf(stderr,"Unable to open %s\n", mlifilen);
|
||||
SWIG_exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
Language::top(n);
|
||||
|
||||
Printf( f_enum_to_int,
|
||||
|
|
@ -231,6 +231,18 @@ public:
|
|||
module );
|
||||
Printf( f_mlibody,
|
||||
"val int_to_enum : c_enum_type -> int -> c_obj\n" );
|
||||
Printf( f_wrappers,
|
||||
"#ifdef __cplusplus\n"
|
||||
"extern \"C\"\n"
|
||||
"#endif\n"
|
||||
"void f_%s_init() {\n"
|
||||
"%s"
|
||||
"}\n",
|
||||
module, init_func_def );
|
||||
Printf( f_mlbody,
|
||||
"external f_init : unit -> unit = \"f_%s_init\"\n"
|
||||
"let _ = f_init ()\n",
|
||||
module, module );
|
||||
Printf( f_enumtypes_type, "]\n" );
|
||||
Printf( f_enumtypes_value, "]\n" );
|
||||
|
||||
|
|
@ -266,11 +278,6 @@ public:
|
|||
return SWIG_OK;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
* functionWrapper()
|
||||
* Create a function declaration and register it with the interpreter.
|
||||
* ------------------------------------------------------------ */
|
||||
|
||||
void throw_unhandled_ocaml_type_error (SwigType *d)
|
||||
{
|
||||
Swig_warning(WARN_TYPEMAP_UNDEF, input_file, line_number,
|
||||
|
|
@ -285,6 +292,10 @@ public:
|
|||
return SwigType_ispointer(SwigType_typedef_resolve_all(t));
|
||||
}
|
||||
|
||||
/*
|
||||
* Delete one reference from a given type.
|
||||
*/
|
||||
|
||||
void oc_SwigType_del_reference(SwigType *t) {
|
||||
char *c = Char(t);
|
||||
if (strncmp(c,"q(",2) == 0) {
|
||||
|
|
@ -298,12 +309,21 @@ public:
|
|||
Replace(t,"r.","", DOH_REPLACE_ANY | DOH_REPLACE_FIRST);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return true iff T is a reference type
|
||||
*/
|
||||
|
||||
int
|
||||
is_a_reference (SwigType *t)
|
||||
{
|
||||
return SwigType_isreference(SwigType_typedef_resolve_all(t));
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
* functionWrapper()
|
||||
* Create a function declaration and register it with the interpreter.
|
||||
* ------------------------------------------------------------ */
|
||||
|
||||
virtual int functionWrapper(Node *n) {
|
||||
char *iname = GetChar(n,"sym:name");
|
||||
SwigType *d = Getattr(n,"type");
|
||||
|
|
@ -673,14 +693,12 @@ public:
|
|||
if (!iname || !addSymbol(iname,n)) return SWIG_ERROR;
|
||||
|
||||
f = NewWrapper();
|
||||
|
||||
|
||||
// evaluation function names
|
||||
|
||||
strcpy(var_name, Char(Swig_name_wrapper(iname)));
|
||||
|
||||
// Build the name for scheme.
|
||||
Printv(proc_name, iname,NIL);
|
||||
//Replaceall(proc_name, "_", "-");
|
||||
Printv(proc_name, iname, NIL);
|
||||
|
||||
if ((SwigType_type(t) != T_USER) || (is_a_pointer(t))) {
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue