From: <spl...@us...> - 2009-05-30 07:11:48
|
Revision: 11242 http://swig.svn.sourceforge.net/swig/?rev=11242&view=rev Author: sploving Date: 2009-05-30 07:10:19 +0000 (Sat, 30 May 2009) Log Message: ----------- Implement functionwrapper Modified Paths: -------------- branches/gsoc2009-sploving/Makefile.in branches/gsoc2009-sploving/README branches/gsoc2009-sploving/Source/Makefile.am branches/gsoc2009-sploving/Source/Modules/swigmain.cxx branches/gsoc2009-sploving/configure.in Added Paths: ----------- branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Examples/scilab/ branches/gsoc2009-sploving/Examples/scilab/simple/ branches/gsoc2009-sploving/Examples/scilab/simple/example.c branches/gsoc2009-sploving/Examples/scilab/simple/example.i branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci branches/gsoc2009-sploving/Lib/scilab/ branches/gsoc2009-sploving/Lib/scilab/scifragments.swg branches/gsoc2009-sploving/Lib/scilab/scilab.swg branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Lib/scilab/std_string.i branches/gsoc2009-sploving/Lib/scilab/std_vector.i branches/gsoc2009-sploving/Lib/scilab/stl.i branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html (rev 0) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,175 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head> +<title>SWIG and Scilab</title> +<link rel="stylesheet" type="text/css" href="style.css"> +</head> + + +<body bgcolor="#ffffff"> + +<H1><a name="Scilab"></a>36 SWIG and Scilab</H1> +<!-- INDEX --> +<div class="sectiontoc"> +<ul> +<li><a href="#Scilab_nn2">Preliminaries</a> +<li><a href="#Scilab_nn3">Running SWIG</a> +<ul> +<li><a href="#Scilab_nn5">Compiling a dynamic module</a> +<li><a href="#Scilab_nn6">Using your module</a> +</ul> +<li><a href="#Scilab_nn7">A tour of basic C/C++ wrapping</a> +<ul> +<li><a href="#Scilab_nn8">Modules</a> +<li><a href="#Scilab_nn9">Functions</a> +</ul> +</ul> +</div> +<!-- INDEX --> + + + +<p> + Scilab is a scientific software package for numerical computations providing a powerful open computing environment for engineering and scientific applications that is mostly compatible with MATLAB.More information can be found at <a href="http://www.scilab.org">www.scilab.org</a>. +</p> + +<p> + This chapter is intended to give an introduction to using the module. You should also read the SWIG documentation that is not specific to Scilab.Also, there are a dozen or so examples in the Examples/Scilab directory. +</p> + +<H2><a name="Scilab_nn2"></a>36.1 Preliminaries</H2> + + +<p> +The current SWIG implemention is based on Scilab 5.1.1. Support for other higher versions has not been tested, nor has support for any OS other than Linux. +</p> + +<H2><a name="Scilab_nn3"></a>36.2 Running SWIG</H2> + + +<p> +Let's start with a very simple SWIG interface file: +</p> + +<div class="code"><pre>%module example +%{ +#include "example.h" +%} +int gcd(int x, int y); +extern double Foo; </pre></div> + +<p> +To build an Scilab module, run SWIG using the <tt>-scilab</tt> option. +</p> + +<div class="shell"><pre>$ swig -scilab example.i </pre></div> + +<p> +This creates a C source file <tt>example_wrap.c</tt>and a interface file <tt>builder.sce</tt>. The generated C source file contains the low-level wrappers that need to be compiled and linked with the rest of your C application (in this case, the gcd implementation) to create an extension module. And the builder.sce is used to generate the *.so file. +</p> + +<p> +The swig command line has a number of options you can use, like to redirect it's output. Use <tt>swig --help</tt> to learn about these. +</p> + +<H3><a name="Scilab_nn5"></a>36.2.1 Compiling a dynamic module</H3> + + +<p> +Scilab modules are shared objects having the ".so" suffix. +Building such a file is usually done with the "exec" command (within Scilab itself) For example, +</p> + +<div class="shell"><pre> +$ ./scilab +--> exec builder.sce +</pre></div> + +<p> + where builder.sce is the interface file generated by the swig. It looks like the following: +</p> +<div class="shell"><pre> +ilib_name = "examplelib"; +files = ["example_wrap.c","example.o"]; +libs = []; +table = ["gcd","_wrap_gcd";"Foo_set","_wrap_Foo_set";"Foo_get","_wrap_Foo_get";]; +ilib_build(ilib_name,table,files,libs); +</pre></div> + + +<p> +"ilib_name" is the name of the lib we want to build. "table" contains the name of the C file and its wrapper file. "files" represent the .o file we want to compile, and"libs" is other libs we want to use. +</p> + +<p> + "exec builder.sce" will produce *.so,and a file called "loader.sce" which contains how to load the module. Loading it into Scilab is then a matter of invoking +</p> + + <div class="targetlang"><pre>Scilab:1> exec loader.sce</pre></div> + +<H3><a name="Scilab_nn6"></a>36.2.2 Using your module</H3> + + +<p> +Assuming all goes well, you will be able to do this: + <br> +</p> + + <div class="targetlang"><pre> +Scilab:2>gcd(4,6) +ans = 2 +Scilab:3>Foo_get +ans = 3 +Scilab:4>Foo_set(4); +Scilab:5>Foo_get +ans = 4 </pre></div> + +<H2><a name="Scilab_nn7"></a>36.3 A tour of basic C wrapping</H2> + + +<H3><a name="Scilab_nn8"></a>36.3.1 Modules</H3> + + +<p> +The SWIG module directive specifies the name of the Scilab module. If you want to load the module, you'll need a file called "loader.sce" which is usually generated by the command "exec builder.sce". The loader.sce looks as following: +</p> + + <div class="targetlang"><pre> +// ------------------------------------------------------ +// generated by builder.sce: Please do not edit this file +// ------------------------------------------------------ + +libexamplelib_path = get_file_path('loader.sce'); +list_functions = [ 'gcd'; + 'Foo_set'; + 'Foo_get'; +]; +addinter(libexamplelib_path+'/libexamplelib.so','libexamplelib',list_functions); +// remove temp. variables on stack +clear libexamplelib_path; +clear list_functions; +clear get_file_path; +// ------------------------------------------------------ + +</pre></div> +<p> +After you run the command "exec loader.sce", you could use the module. +</pre> + +<H3><a name="Scilab_nn9"></a>36.3.2 Functions</H3> + + +<p> +Global functions are wrapped as new Scilab built-in functions. For example, +</p> + + <div class="code"><pre>%module example +int fact(int n); </pre></div> + +<p> + creates a built-in function <tt>fact(n)</tt> that works exactly like you think it does: +</p> + + <div class="targetlang"><pre>Scilab:1>fact(4) +ant=24 </pre></div> + Added: branches/gsoc2009-sploving/Examples/scilab/simple/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/example.c (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/simple/example.c 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,18 @@ +/* File : example.c */ + +/* A global variable */ +double Foo = 3.0; + +/* Compute the greatest common divisor of positive integers */ +int gcd(int x, int y) { + int g; + g = y; + while (x > 0) { + g = x; + x = y % x; + y = g; + } + return g; +} + + Added: branches/gsoc2009-sploving/Examples/scilab/simple/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/simple/example.i 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,7 @@ +/* File : example.i */ +%module example + +%inline %{ +extern int gcd(int x, int y); +extern double Foo; +%} Added: branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,23 @@ +// builder the *.so +exec builder.sce; + +//loader the *.so +exec loader.sce; + +// Call our gcd() function +x = 42; +y = 105; +g = gcd(x,y); +printf("The gcd of %d and %d is %d\n",x,y,g); + +//Manipulate the Foo global variable + +// Output its current value +Foo_get() + +// Change its value +Foo_set = 3.1415926 + +//See if the change took effect +Foo_get + Added: branches/gsoc2009-sploving/Lib/scilab/scilab.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scilab.swg (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/scilab.swg 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,4 @@ +%include <typemaps/swigmacros.swg> +%include <typemaps/fragments.swg> +%include <scitypemaps.swg> + Added: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,123 @@ + +// Include fundamental fragemt definitions +%include <typemaps/fragments.swg> + +// Look for user fragments file. +%include <scifragments.swg> + +// Scilab fragments for primitive types +%include <sciprimtypes.swg> + +// Include the unified typemap library +//%include <typemaps/swigtypemaps.swg> + + +%typemap(in) char (int m, int n,int l), + signed char (int m,int n,int l), + unsigned char(int m,int n,int l) +{ + if (GetType($argnum) == sci_strings) + { + GetRhsVar($argnum,STRING_DATATYPE,&m,&n,&l); + $1=($1_ltype)(*cstk(l)); + } + else + Scierror(999,"error ...\n"); +} + +%typemap(in) short (int m, int n,int l), + unsigned short (int m,int n,int l), + int(int m,int n,int l), + unsigned int(int m, int n,int l), + long(int m,int n,int l), + unsigned long(int m,int n,int l), + double(int m,int n,int l) + + +{ + if (GetType($argnum) == sci_matrix) + { + GetRhsVar($argnum,MATRIX_OF_DOUBLE_DATATYPE,&m,&n,&l); + $1=($1_ltype)(*stk(l)); + } + else + Scierror(999,"error ...\n"); +} + +%typemap(in) float (int m, int n,int l) +{ + if (GetType($argnum) == sci_matrix) + { + GetRhsVar($argnum,MATRIX_OF_DOUBLE_DATATYPE,&m,&n,&l); + $1=($1_ltype)(*stk(l)); + } + else + Scierror(999,"error ...\n"); +} + +%typemap(in) char *(int m,int n,int l) +{ + if (GetType($argnum) == sci_strings) + { + GetRhsVar($argnum,STRING_DATATYPE,&m,&n,&l); + $1=($1_ltype)strdup(cstk(l)); + } + else + Scierror(999,"error ...\n"); + +} + + +%typemap(out) char (int m, int n,int l), + signed char (int m,int n,int l), + unsigned char(int m,int n,int l) +{ + m=1,n=1; + CreateVar(Rhs+1,STRING_DATATYPE,&m,&n,&l); + *cstk(l)=$1; + LhsVar(1)=Rhs+1; +} + +%typemap(out) short (int m, int n,int l), + unsigned short (int m,int n,int l), + int(int m,int n,int l), + unsigned int(int m, int n,int l), + long(int m,int n,int l), + unsigned long(int m,int n,int l), + double(int m,int n,int l) +{ + m=1,n=1; + CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&m,&n,&l); + *stk(l)=(double)$1; + LhsVar(1)=Rhs+1; +} + +%typemap(out) float (int m, int n,int l) +{ + m=1,n=1; + CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&m,&n,&l); + *stk(l)=(double)$1; + LhsVar(1)=Rhs+1; +} + + +%typemap(out) char *(int m,int n, int l) +{ + m=1; + if ($1) + n = (int)strlen($1); + else + n = (int)strlen(""); + + CreateVar(Rhs+1,STRING_DATATYPE ,&m,&n,&l); + if ($1) strcpy(cstk(l),$1); + else strcpy(cstk(l),""); + LhsVar(1) = Rhs+1; +} + + +%typemap(out,noblock=1) void +{ +} + + Added: branches/gsoc2009-sploving/Lib/scilab/std_string.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/std_string.i (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/std_string.i 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1 @@ +%include <typemaps/std_string.swg> Added: branches/gsoc2009-sploving/Lib/scilab/std_vector.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/std_vector.i (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/std_vector.i 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,10 @@ +%fragment("StdVectorTraits","header") +%{ +%} + +#define %swig_vector_methods(Type...) %swig_sequence_methods(Type) +#define %swig_vector_methods_val(Type...) %swig_sequence_methods_val(Type); + + + +%include <std/std_vector.i> \ No newline at end of file Added: branches/gsoc2009-sploving/Lib/scilab/stl.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/stl.i (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/stl.i 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,8 @@ +/* initial STL definition. extended as needed in each language */ +%include std_common.i +%include std_vector.i +%include std_string.i + + + + Modified: branches/gsoc2009-sploving/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Makefile.in 2009-05-29 17:44:20 UTC (rev 11241) +++ branches/gsoc2009-sploving/Makefile.in 2009-05-30 07:10:19 UTC (rev 11242) @@ -75,6 +75,7 @@ skip-cffi = test -n "@SKIP_CFFI@" skip-uffi = test -n "@SKIP_UFFI@" skip-r = test -n "@SKIP_R@" +skip-scilab = test -n "@SKIP_SCILAB@" # Additional dependencies for some tests skip-gcj = test -n "@SKIP_GCJ@" @@ -110,7 +111,7 @@ @$(skip-modula3) || ./$(TARGET) -modula3 -help @$(skip-lua) || ./$(TARGET) -lua -help @$(skip-r) || ./$(TARGET) -r -help - + @$(skip-scilab) || ./$(TARGET) -scilab -help check-ccache: test -z "$(ENABLE_CCACHE)" || (cd $(CCACHE) && $(MAKE) check) @@ -135,8 +136,8 @@ check-clisp-examples \ check-uffi-examples \ check-cffi-examples \ - check-r-examples - + check-r-examples \ + check-scilab-examples tcl_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/tcl/check.list) perl5_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/perl5/check.list) python_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/python/check.list) @@ -157,6 +158,7 @@ uffi_examples := cffi_examples := r_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/r/check.list) +scilab_examples := # all examples check-%-examples : @@ -203,8 +205,8 @@ check-chicken-gifplot \ # check-lua-gifplot \ # check-csharp-gifplot \ -# check-modula3-gifplot - +# check-modula3-gifplot \ + check-scilab-gifplot check-%-gifplot: gifplot-library @if test -z "$(skip-$*)"; then \ echo $* unknown; \ @@ -250,8 +252,8 @@ check-uffi-test-suite \ check-cffi-test-suite \ check-chicken-test-suite \ - check-r-test-suite - + check-r-test-suite \ + check-scilab-test-suite check-%-test-suite: @if test -z "$(skip-$*)"; then \ echo $* unknown; \ @@ -301,8 +303,8 @@ all-uffi-test-suite \ all-cffi-test-suite \ all-chicken-test-suite \ - all-r-test-suite - + all-r-test-suite \ + all-scilab-test-suite all-%-test-suite: @$(MAKE) -k -s check-$*-test-suite ACTION=all @@ -328,7 +330,8 @@ broken-uffi-test-suite \ broken-cffi-test-suite \ broken-chicken-test-suite \ - broken-r-test-suite + broken-r-test-suite \ + broken-scilab-test-suite broken-%-test-suite: @$(MAKE) -k -s check-$*-test-suite ACTION=broken @@ -442,7 +445,7 @@ @$(INSTALL_PROGRAM) $(TARGET) $(DESTDIR)$(BIN_DIR)/`echo $(TARGET_NOEXE) | sed '$(transform)'`@EXEEXT@ lib-languages = gcj typemaps tcl perl5 python guile java mzscheme ruby php ocaml octave \ - pike chicken csharp modula3 allegrocl clisp lua cffi uffi r + pike chicken csharp modula3 allegrocl clisp lua cffi uffi r scilab lib-modules = std Modified: branches/gsoc2009-sploving/README =================================================================== --- branches/gsoc2009-sploving/README 2009-05-29 17:44:20 UTC (rev 11241) +++ branches/gsoc2009-sploving/README 2009-05-30 07:10:19 UTC (rev 11242) @@ -59,7 +59,7 @@ Martin Froehlich <MartinFroehlich@ACM.org> (Guile) Marcio Luis Teixeira <ma...@ho...> (Guile) Duncan Temple Lang (R) - Baozeng Ding <spl...@16...> (Scilab) + Baozeng Ding <spl...@16...> (Scilab) Past contributors include: James Michael DuPont, Clark McGrew, Dustin Mitchell, Ian Cooke, Catalin Dumitrescu, Baran Modified: branches/gsoc2009-sploving/Source/Makefile.am =================================================================== --- branches/gsoc2009-sploving/Source/Makefile.am 2009-05-29 17:44:20 UTC (rev 11241) +++ branches/gsoc2009-sploving/Source/Makefile.am 2009-05-30 07:10:19 UTC (rev 11242) @@ -63,6 +63,7 @@ Modules/r.cxx \ Modules/ruby.cxx \ Modules/s-exp.cxx \ + Modules/scilab.cxx \ Modules/swigmain.cxx \ Modules/tcl8.cxx \ Modules/typepass.cxx \ Added: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx (rev 0) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-05-30 07:10:19 UTC (rev 11242) @@ -0,0 +1,288 @@ +/* ----------------------------------------------------------------------------- + * See the LICENSE file for information on copyright, usage and redistribution + * of SWIG, and the README file for authors - http://www.swig.org/release.html. + * + * scilab.cxx + * + * Scilab language module for SWIG. + * ----------------------------------------------------------------------------- */ + +char cvsroot_scilab_cxx[] = "$Id$"; + +#include "swigmod.h" + +static const char *usage = (char *) "\ +Scilab Options (available with -scilab)\n\ + (none yet)\n\n"; + + +class SCILAB:public Language { + private: + File *f_begin; + File *f_runtime; + File *f_header; + File *f_wrappers; + File *f_init; + File *f_builder; + + public: + SCILAB():f_begin(0), f_runtime(0), f_header(0),f_wrappers(0), + f_init(0) {} + + + /* ------------------------------------------------------------ + * main() + * ------------------------------------------------------------ */ + + virtual void main(int argc, char *argv[]) { + for (int i = 1; i < argc; i++) { + if (argv[i]) { + if (strcmp(argv[i], "-help") == 0) { + fputs(usage, stderr); + } + } + } + + //Set language-specific subdirectory in SWIG library + SWIG_library_directory("scilab"); + + // Add a symbol to the parser for conditional compilation + Preprocessor_define("SWIGSCILAB 1", 0); + + // Set scilab configuration file + SWIG_config_file("scilab.swg"); + + //Set typemap for scilab + SWIG_typemap_lang("scilab"); + } + + /* --------------------------------------------------------------------- + * top() + * --------------------------------------------------------------------- */ + + virtual int top(Node *n) { + + Node *mod = Getattr(n, "module"); + + /*Get the name of the module*/ + String *module = Getattr(n, "name"); + + /*One output file for as the wrapper file*/ + String *outfile = Getattr(n, "outfile"); + f_begin = NewFile(outfile, "w", SWIG_output_files()); + + /*Another output file to generate the .so or .dll */ + String *builder = NewString("builder.sce"); + f_builder=NewFile(builder,"w",SWIG_output_files()); + + /* Initialize all of the output files */ + if (!f_begin) { + FileErrorDisplay(outfile); + SWIG_exit(EXIT_FAILURE); + } + f_runtime = NewString(""); + f_header = NewString(""); + f_wrappers = NewString(""); + f_init = NewString(""); + + /* Register file targets with the SWIG file handler */ + Swig_register_filebyname("begin", f_begin); + Swig_register_filebyname("runtime", f_runtime); + Swig_register_filebyname("header", f_header); + Swig_register_filebyname("wrapper", f_wrappers); + Swig_register_filebyname("init", f_init); + + /*Insert the banner at the beginning */ + Swig_banner(f_begin); + + /*Include some header file of scilab*/ + Printf(f_runtime, "#include \"stack-c.h\"\n"); + Printf(f_runtime, "#include \"sciprint.h\"\n"); + Printf(f_runtime, "#include \"Scierror.h\"\n"); + + /*Initialize the builder.sce file*/ + Printf(f_builder,"ilib_name = \"%slib\";\n",module); + Printf(f_builder,"files = [\"%s\",\"%s.o\"];\n", outfile,module); + Printf(f_builder,"libs = [];\n"); + Printf(f_builder, "table = ["); + + + /*Emit code for children*/ + Language::top(n); + + /*Finish off the builder.sce file*/ + Printf(f_builder,"];\n"); + Printf(f_builder,"ilib_build(ilib_name,table,files,libs);"); + + /*Dump out all the files*/ + Dump(f_runtime, f_begin); + Dump(f_header, f_begin); + Dump(f_wrappers, f_begin); + Wrapper_pretty_print(f_init, f_begin); + + /* Close all of the files */ + Delete(f_init); + Delete(f_wrappers); + Delete(f_header); + Delete(f_runtime); + Close(f_begin); + Close(f_builder); + Delete(f_begin); + Delete(f_builder); + + return SWIG_OK; + } + + /* ---------------------------------------------------------------------- + * functionWrapper() + * ---------------------------------------------------------------------- */ + + virtual int functionWrapper(Node *n) { + + // A new wrapper function object + Wrapper *f = NewWrapper(); + + Parm *p; + String *tm; + int j; + + //Get the useful information from the node + String *nodeType = Getattr(n, "nodeType"); + int constructor = (!Cmp(nodeType, "constructor")); + int destructor = (!Cmp(nodeType, "destructor")); + String *storage = Getattr(n, "storage"); + + bool overloaded = !!Getattr(n, "sym:overloaded"); + bool last_overload = overloaded && !Getattr(n, "sym:nextSibling"); + String *iname = Getattr(n, "sym:name"); + String *wname = Swig_name_wrapper(iname); + String *overname = Copy(wname); + SwigType *d = Getattr(n, "type"); + ParmList *l = Getattr(n, "parms"); + + if (!overloaded && !addSymbol(iname, n)) + return SWIG_ERROR; + + if (overloaded) + Append(overname, Getattr(n, "sym:overname")); + + Printv(f->def, "int ", overname, " (char *fname){", NIL); + + // Emit all of the local variables for holding arguments + emit_parameter_variables(l, f); + + //Attach typemaps to the parameter list + emit_attach_parmmaps(l, f); + Setattr(n, "wrap:parms", l); + + // Get number of required and total arguments + int num_arguments = emit_num_arguments(l); + int num_required = emit_num_required(l); + int varargs = emit_isvarargs(l); + + if (constructor && num_arguments == 1 && num_required == 1) { + if (Cmp(storage, "explicit") == 0) { + Node *parent = Swig_methodclass(n); + if (GetFlag(parent, "feature:implicitconv")) { + String *desc = NewStringf("SWIGTYPE%s", SwigType_manglestr(Getattr(n, "type"))); + Printf(f->code, "if (SWIG_CheckImplicit(%s)) SWIG_fail;\n", desc); + Delete(desc); + } + } + } + + //Walk the function parameter list and generate code to get arguments + for (j = 0, p = l; j < num_arguments; ++j) { + while (checkAttribute(p, "tmap:in:numinputs", "0")) { + p = Getattr(p, "tmap:in:next"); + } + + SwigType *pt = Getattr(p, "type"); + + // Get typemap for this argument + String *tm = Getattr(p, "tmap:in"); + + if (tm) { + if (!tm || checkAttribute(p, "tmap:in:numinputs", "0")) { + p = nextSibling(p); + continue; + } + String *getargs = NewString(""); + Printv(getargs, tm, NIL); + Printv(f->code, getargs, "\n", NIL); + Delete(getargs); + p = Getattr(p, "tmap:in:next"); + continue; + } else { + Swig_warning(WARN_TYPEMAP_IN_UNDEF, input_file, line_number, "Unable to use type %s as a function argument.\n", SwigType_str(pt, 0)); + break; + } + } + + Setattr(n, "wrap:name", overname); + + // Now write code to make the function call + Swig_director_emit_dynamic_cast(n, f); + String *actioncode = emit_action(n); + + //Insert the return variable + emit_return_variable(n, d, f); + + if ((tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode))) { + + Printf(f->code, "%s\n", tm); + + } + else { + Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, "Unable to use return type %s in function %s.\n", SwigType_str(d, 0), iname); + } + + /* Insert argument output code */ + String *outarg = NewString(""); + for (p = l; p;) { + if ((tm = Getattr(p, "tmap:argout"))) { + Replaceall(tm, "$result", "_outp"); + //Replaceall(tm, "$arg", Getattr(p, "emit:input")); + //Replaceall(tm, "$input", Getattr(p, "emit:input")); + Printv(outarg, tm, "\n", NIL); + p = Getattr(p, "tmap:argout:next"); + } else { + p = nextSibling(p); + } + } + Printv(f->code, outarg, NIL); + + /* Finish the the code for the function */ + Printf(f->code, "return 0;\n"); + Printf(f->code, "}\n"); + + Replaceall(f->code, "$symname", iname); + + /* Dump the wrapper function */ + Wrapper_print(f, f_wrappers); + DelWrapper(f); + Printf(f_builder, "\"%s\",\"%s\";",iname,wname); + + Delete(overname); + Delete(wname); + Delete(outarg); + + return SWIG_OK; + } + + /* ----------------------------------------------------------------------- + * variableWrapper() + * ----------------------------------------------------------------------- */ + + virtual int variableWrapper(Node *n) { + + Language::variableWrapper(n); /* Default to functions */ + + return SWIG_OK; + } + +}; + +extern "C" Language *swig_scilab(void) { + return new SCILAB(); +} Modified: branches/gsoc2009-sploving/Source/Modules/swigmain.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/swigmain.cxx 2009-05-29 17:44:20 UTC (rev 11241) +++ branches/gsoc2009-sploving/Source/Modules/swigmain.cxx 2009-05-30 07:10:19 UTC (rev 11242) @@ -47,6 +47,7 @@ Language *swig_cffi(void); Language *swig_uffi(void); Language *swig_r(void); + Language *swig_scilab(void); } struct swig_module { @@ -81,6 +82,7 @@ {"-python", swig_python, "Python"}, {"-r", swig_r, "R (aka GNU S)"}, {"-ruby", swig_ruby, "Ruby"}, + {"-scilab",swig_scilab,"Scilab"}, {"-sexp", swig_sexp, "Lisp S-Expressions"}, {"-tcl", swig_tcl, "Tcl"}, {"-tcl8", swig_tcl, 0}, Modified: branches/gsoc2009-sploving/configure.in =================================================================== --- branches/gsoc2009-sploving/configure.in 2009-05-29 17:44:20 UTC (rev 11241) +++ branches/gsoc2009-sploving/configure.in 2009-05-30 07:10:19 UTC (rev 11242) @@ -916,6 +916,70 @@ AC_SUBST(OCTAVECCFLAGS) #---------------------------------------------------------------- +# Look for Scilab +#---------------------------------------------------------------- + +SCILABBIN= +SCILABDYNAMICLINKING= + + +AC_ARG_WITH(scilab, AS_HELP_STRING([--without-scilab], [Disable Scilab]) +AS_HELP_STRING([--with-scilab=path], [Set location of Scilab executable]),[SCILABBIN="$withval"], [SCILABBIN=yes]) + +# First, check for "--without-scilab" or "--with-scilab=no". +if test x"${SCILABBIN}" = xno -o x"${with_alllang}" = xno ; then +AC_MSG_NOTICE([Disabling Scilab]) +SCILAB= +else + +# First figure out what the name of Scilab is + +if test "x$SCILABBIN" = xyes; then +AC_CHECK_PROGS(SCILAB, scilab) +else +SCILAB="$SCILABBIN" +fi + + +AC_MSG_CHECKING(for Scilab header files) +if test -n "$SCILAB"; then + SCILABDIR="/usr/include" + if test "$SCILABDIR" != ""; then + dirs="$SCILABDIR" + SCILABEXT="" + for i in $dirs; do + if test -r $i/scilab/stack.h; then + SCILABEXT="$i" + break; + fi + if test -r $i/scilab/scialab/stack.h; then + SCILABEXT="$i/scilab" + break; + fi + done + if test "$SCILABEXT" = "" ; then + AC_MSG_RESULT(not found) + else + AC_MSG_RESULT($SCILABEXT) + fi + + AC_MSG_CHECKING(for Scilab compiler options) + SCILABCCFLAGS="" + AC_MSG_RESULT($SCILABCCFLAGS) + fi +else + AC_MSG_RESULT(could not figure out how to run scilab) +fi + +fi + +AC_SUBST(SCILAB) +AC_SUBST(SCILABEEXT) +AC_SUBST(SCILABDYNAMICLINKING) +AC_SUBST(SCILABLIB) +AC_SUBST(SCILABCCFLAGS) + +#---------------------------------------------------------------- # Look for java #---------------------------------------------------------------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-06-07 02:12:55
|
Revision: 11249 http://swig.svn.sourceforge.net/swig/?rev=11249&view=rev Author: sploving Date: 2009-06-07 01:44:39 +0000 (Sun, 07 Jun 2009) Log Message: ----------- global variable Modified Paths: -------------- branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Examples/octave/variables/example.c branches/gsoc2009-sploving/Lib/scilab/scilab.swg branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Modified: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-06-06 16:25:24 UTC (rev 11248) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-06-07 01:44:39 UTC (rev 11249) @@ -22,6 +22,7 @@ <ul> <li><a href="#Scilab_nn8">Modules</a> <li><a href="#Scilab_nn9">Functions</a> +<li><a href="#scilab_nn10">Global variables</a> </ul> </ul> </div> @@ -172,4 +173,19 @@ <div class="targetlang"><pre>Scilab:1>fact(4) ant=24 </pre></div> +<H3><a name="scilab_nn10"></a>27.3.3 Global variables</H3> +<p> + To expose variables, SWIG actually generates two functions, to get and set the value. In this case, Foo_set and Foo_set would be generated. SWIG then automatically calls these functions when you get and set the variable-- in the former case creating a local copy in the interpreter of the C variables, and in the latter case copying an interpreter variables onto the C variable. +</p> + + <div class="targetlang"><pre>scilab:1> exec loader.sce; +scilab:2> c=Foo +c = 3 +scilab:3> Foo=4; +scilab:4> c +c = 3 +scilab:5> Foo +ans = 4</pre></div> + + Modified: branches/gsoc2009-sploving/Examples/octave/variables/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/octave/variables/example.c 2009-06-06 16:25:24 UTC (rev 11248) +++ branches/gsoc2009-sploving/Examples/octave/variables/example.c 2009-06-07 01:44:39 UTC (rev 11249) @@ -25,7 +25,7 @@ char *strvar = 0; const char cstrvar[] = "Goodbye"; int *iptrvar = 0; -char name[256] = "Dave"; +char name[5] = "Dave"; char path[256] = "/home/beazley"; @@ -53,8 +53,8 @@ printf("strvar = %s\n", strvar ? strvar : "(null)"); printf("cstrvar = %s\n", cstrvar ? cstrvar : "(null)"); printf("iptrvar = %p\n", iptrvar); - printf("name = %s\n", name); - printf("ptptr = %p (%d, %d)\n", ptptr, ptptr ? ptptr->x : 0, ptptr ? ptptr->y : 0); + printf("name = %c%c%c%c%c\n", name[0],name[1],name[2],name[3],name[4]); + printf("ptptr = %p %s\n", ptptr, Point_print( ptptr ) ); printf("pt = (%d, %d)\n", pt.x, pt.y); printf("status = %d\n", status); } @@ -67,6 +67,10 @@ return ip; } +int value_int(int *value) { + return *value; +} + /* A function to create a point */ Point *new_Point(int x, int y) { Modified: branches/gsoc2009-sploving/Lib/scilab/scilab.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scilab.swg 2009-06-06 16:25:24 UTC (rev 11248) +++ branches/gsoc2009-sploving/Lib/scilab/scilab.swg 2009-06-07 01:44:39 UTC (rev 11249) @@ -1,4 +1,5 @@ %include <typemaps/swigmacros.swg> %include <typemaps/fragments.swg> +%include <sciprimtype.swg> %include <scitypemaps.swg> Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-06 16:25:24 UTC (rev 11248) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-07 01:44:39 UTC (rev 11249) @@ -12,49 +12,69 @@ //%include <typemaps/swigtypemaps.swg> -%typemap(in) char (int m, int n,int l), - signed char (int m,int n,int l), - unsigned char(int m,int n,int l) +%typemap(in) char (int *piAddrVar, int iRows, int iCols), + signed char (int *piAddrVar, int iRows, int iCols), + unsigned char(int *piAddrVar, int iRows, int iCols) { - if (GetType($argnum) == sci_strings) - { - GetRhsVar($argnum,STRING_DATATYPE,&m,&n,&l); - $1=($1_ltype)(*cstk(l)); - } - else - Scierror(999,"error ...\n"); + char* _piData8; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + if(getVarType(piAddrVar) != sci_matrix || iRows1 != 1 || iCols1 != 1 || isVarComplex(piAddrVar)) + { + Scierror(999,_("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData8); + $1=_piData8[0]; } -%typemap(in) short (int m, int n,int l), - unsigned short (int m,int n,int l), - int(int m,int n,int l), - unsigned int(int m, int n,int l), - long(int m,int n,int l), - unsigned long(int m,int n,int l), - double(int m,int n,int l) +%typemap(in) short (int *piAddrVar, int iRows, int iCols), + unsigned short (int *piAddrVar, int iRows, int iCols) - -{ - if (GetType($argnum) == sci_matrix) - { - GetRhsVar($argnum,MATRIX_OF_DOUBLE_DATATYPE,&m,&n,&l); - $1=($1_ltype)(*stk(l)); - } - else - Scierror(999,"error ...\n"); +{ short* _piData16; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + if(getVarType(piAddrVar) != sci_matrix || iRows1 != 1 || iCols1 != 1 || isVarComplex(piAddrVar)) + { + Scierror(999,_("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData16); + $1= _piData16[0]; + } -%typemap(in) float (int m, int n,int l) -{ - if (GetType($argnum) == sci_matrix) - { - GetRhsVar($argnum,MATRIX_OF_DOUBLE_DATATYPE,&m,&n,&l); - $1=($1_ltype)(*stk(l)); - } - else - Scierror(999,"error ...\n"); +%typemap(in) int (int *piAddrVar, int iRows, int iCols), + unsigned int (int *piAddrVar, int iRows, int iCols) + +{ int* _piData32; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + if(getVarType(piAddrVar) != sci_matrix || iRows1 != 1 || iCols1 != 1 || isVarComplex(piAddrVar)) + { + Scierror(999,_("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData32); + $1= _piData32[0]; + } +%typemap(in) long(int* piAddrVar,int iRows,int iCols), + unsigned long(int* piAddrVar,int iRows,int iCols), + double(int* piAddrVar,int iRows,int iCols), + float (int* piAddrVar,int iRows,int iCols) + +{ double *pdblReal; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + if(getVarType(piAddrVar) != sci_matrix || iRows1 != 1 || iCols1 != 1 || isVarComplex(piAddrVar)) + { + Scierror(999,_("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &pdblReal); + $1= pdblReal[0]; + +} + +/* %typemap(in) char *(int m,int n,int l) { if (GetType($argnum) == sci_strings) @@ -65,54 +85,53 @@ else Scierror(999,"error ...\n"); -} +}*/ -%typemap(out) char (int m, int n,int l), - signed char (int m,int n,int l), - unsigned char(int m,int n,int l) +%typemap(out) char (int iRowsOut,int iColsOut,int* _piAddress), + signed char (int iRowsOut,int iColsOut,int* _piAddress), + unsigned char(int iRowsOut,int iColsOut,int* _piAddress) { - m=1,n=1; - CreateVar(Rhs+1,STRING_DATATYPE,&m,&n,&l); - *cstk(l)=$1; + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger8(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); LhsVar(1)=Rhs+1; + PutLhsVar(); } -%typemap(out) short (int m, int n,int l), - unsigned short (int m,int n,int l), - int(int m,int n,int l), - unsigned int(int m, int n,int l), - long(int m,int n,int l), - unsigned long(int m,int n,int l), - double(int m,int n,int l) +%typemap(out) short (int iRowsOut,int iColsOut,int* _piAddress), + unsigned short(int iRowsOut,int iColsOut,int* _piAddress) + { - m=1,n=1; - CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&m,&n,&l); - *stk(l)=(double)$1; + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger16(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); LhsVar(1)=Rhs+1; + PutLhsVar(); } -%typemap(out) float (int m, int n,int l) +%typemap(out) int (int iRowsOut,int iColsOut,int* _piAddress), + unsigned int(int iRowsOut,int iColsOut,int* _piAddress) + { - m=1,n=1; - CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&m,&n,&l); - *stk(l)=(double)$1; + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger32(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); LhsVar(1)=Rhs+1; + PutLhsVar(); } -%typemap(out) char *(int m,int n, int l) +%typemap(out) long(int iRowsOut,int iColsOut,int* _piAddress), + unsigned long(int iRowsOut,int iColsOut,int* _piAddress), + double(int iRowsOut,int iColsOut,int* _piAddress), + float(int iRowsOut,int iColsOut,int* _piAddress) { - m=1; - if ($1) - n = (int)strlen($1); - else - n = (int)strlen(""); - - CreateVar(Rhs+1,STRING_DATATYPE ,&m,&n,&l); - if ($1) strcpy(cstk(l),$1); - else strcpy(cstk(l),""); - LhsVar(1) = Rhs+1; + iRowsOut=1; + iColsOut=1; + createMatrixDouble(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); + LhsVar(1)=Rhs+1; + PutLhsVar(); } Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-06 16:25:24 UTC (rev 11248) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-07 01:44:39 UTC (rev 11249) @@ -276,9 +276,80 @@ virtual int variableWrapper(Node *n) { - Language::variableWrapper(n); /* Default to functions */ + String *name = Getattr(n, "name"); + String *iname = Getattr(n, "sym:name"); + SwigType *t = Getattr(n, "type"); + if (!addSymbol(iname, n)) + return SWIG_ERROR; + + String *tm; + Wrapper *getf = NewWrapper(); + Wrapper *setf = NewWrapper(); + + String *getname = Swig_name_get(iname); + String *setname = Swig_name_set(iname); + + Printv(setf->def, "int ", setname, " (char *fname){", NIL); + + Wrapper_add_local(setf, "piAddrVar", "int *piAddrVar"); + Wrapper_add_local(setf, "iRows", "int iRows"); + Wrapper_add_local(setf, "iCols", "int iCols"); + // Wrapper_add_local(setf, "pdblReal", "double *pdblReal"); + + + if (is_assignable(n)) { + Setattr(n, "wrap:name", setname); + if ((tm = Swig_typemap_lookup("in", n, name, 0))) { + Replaceall(tm, "$source", "args(0)"); + Replaceall(tm, "$target", name); + Replaceall(tm, "$input", "args(0)"); + Replaceall(tm, "$argnum", "1"); + //if (Getattr(n, "tmap:varin:implicitconv")) { + //Replaceall(tm, "$implicitconv", get_implicitconv_flag(n)); + //} + emit_action_code(n, setf->code, tm); + Delete(tm); + } else { + Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number, "Unable to set variable of type %s.\n", SwigType_str(t, 0)); + } + + } else { + //Printf(setf->code, "return octave_set_immutable(args,nargout);"); + } + Append(setf->code, "}\n"); + Wrapper_print(setf, f_wrappers); + Printf(f_builder, "\"%s\",\"%s\";",iname,setname); + + Setattr(n, "wrap:name", getname); + int addfail = 0; + Printv(getf->def, "int ", getname, " (char *fname){", NIL); + + Wrapper_add_local(getf, "piAddrOut", "int* _piAddress"); + Wrapper_add_local(getf, "iRows", "int iRowsOut"); + Wrapper_add_local(getf, "iColsOut", "int iColsOut "); + + if ((tm = Swig_typemap_lookup("out", n, name, 0))) { + Replaceall(tm, "$source", name); + Replaceall(tm, "$target", "obj"); + Replaceall(tm, "$result", "obj"); + addfail = emit_action_code(n, getf->code, tm); + Delete(tm); + } else { + Swig_warning(WARN_TYPEMAP_VAROUT_UNDEF, input_file, line_number, "Unable to read variable of type %s\n", SwigType_str(t, 0)); + } + //Append(getf->code, " return obj;\n"); + //if (addfail) { + //Append(getf->code, "fail:\n"); + //Append(getf->code, " return octave_value_list();\n"); + //} + Append(getf->code, "}\n"); + Wrapper_print(getf, f_wrappers); + Printf(f_builder, "\"%s\",\"%s\";",iname,getname); + return SWIG_OK; + + } }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-06-13 13:14:36
|
Revision: 11251 http://swig.svn.sourceforge.net/swig/?rev=11251&view=rev Author: sploving Date: 2009-06-13 12:18:35 +0000 (Sat, 13 Jun 2009) Log Message: ----------- add support for constants Modified Paths: -------------- branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Examples/Makefile.in branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci branches/gsoc2009-sploving/Lib/scilab/scilab.swg branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/scilab/constants/ branches/gsoc2009-sploving/Examples/scilab/constants/example.i branches/gsoc2009-sploving/Examples/scilab/constants/makefile branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci branches/gsoc2009-sploving/Examples/scilab/simple/makefile branches/gsoc2009-sploving/Examples/scilab/variables/ branches/gsoc2009-sploving/Examples/scilab/variables/example.c branches/gsoc2009-sploving/Examples/scilab/variables/example.i branches/gsoc2009-sploving/Examples/scilab/variables/makefile branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci branches/gsoc2009-sploving/Lib/scilab/sciprimtypes.swg Modified: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-06-07 19:31:37 UTC (rev 11250) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-06-13 12:18:35 UTC (rev 11251) @@ -23,6 +23,7 @@ <li><a href="#Scilab_nn8">Modules</a> <li><a href="#Scilab_nn9">Functions</a> <li><a href="#scilab_nn10">Global variables</a> +<li><a href="#Scilab_nn11">Constants</a> </ul> </ul> </div> @@ -66,7 +67,7 @@ <div class="shell"><pre>$ swig -scilab example.i </pre></div> <p> -This creates a C source file <tt>example_wrap.c</tt>and a interface file <tt>builder.sce</tt>. The generated C source file contains the low-level wrappers that need to be compiled and linked with the rest of your C application (in this case, the gcd implementation) to create an extension module. And the builder.sce is used to generate the *.so file. +This creates a C source file <tt>example_wrap.c</tt> and a interface file <tt>builder.sce</tt>. The generated C source file contains the low-level wrappers that need to be compiled and linked with the rest of your C application (in this case, the gcd implementation) to create an extension module. And the builder.sce is used to generate the *.so file. </p> <p> @@ -89,7 +90,7 @@ <p> where builder.sce is the interface file generated by the swig. It looks like the following: </p> -<div class="shell"><pre> +<div class="code"><pre> ilib_name = "examplelib"; files = ["example_wrap.c","example.o"]; libs = []; @@ -97,16 +98,21 @@ ilib_build(ilib_name,table,files,libs); </pre></div> - -<p> -"ilib_name" is the name of the lib we want to build. "table" contains the name of the C file and its wrapper file. "files" represent the .o file we want to compile, and"libs" is other libs we want to use. +<p>ilib_build(lib_name,table,files,libs) is used to create shared libraries and to generate a loader file which can be used to dynamically load the shared library into Scilab with addinter. </p> +<ul> +<li><tt><b>ilib_name</b></tt>: a character string, the generic name of the library without path and extension.</li> +<li><tt><b>files</b></tt>: string matrix giving objects files needed for shared library creation.</li> +<li><tt><b>libs</b></tt>: string matrix giving extra libraries needed for shred library creation.</li> +<li><tt><b>table</b></tt>: two column string matrix giving the table of pairs 'scilab-name', 'interface name'.</li> +</ul> + <p> "exec builder.sce" will produce *.so,and a file called "loader.sce" which contains how to load the module. Loading it into Scilab is then a matter of invoking </p> - <div class="targetlang"><pre>Scilab:1> exec loader.sce</pre></div> + <div class="shell"><pre>Scilab:1> exec loader.sce</pre></div> <H3><a name="Scilab_nn6"></a>36.2.2 Using your module</H3> @@ -119,9 +125,12 @@ <div class="targetlang"><pre> Scilab:2>gcd(4,6) ans = 2 + Scilab:3>Foo_get ans = 3 + Scilab:4>Foo_set(4); + Scilab:5>Foo_get ans = 4 </pre></div> @@ -135,7 +144,7 @@ The SWIG module directive specifies the name of the Scilab module. If you want to load the module, you'll need a file called "loader.sce" which is usually generated by the command "exec builder.sce". The loader.sce looks as following: </p> - <div class="targetlang"><pre> + <div class="code"><pre> // ------------------------------------------------------ // generated by builder.sce: Please do not edit this file // ------------------------------------------------------ @@ -153,6 +162,15 @@ // ------------------------------------------------------ </pre></div> +<p>addinter (files,spname,fcts) performs incremental linking of a compiled C new Scilab interface routine. +</p> +<ul> +<li><tt><b>files</b></tt>: a character string or a vector of character string contain object files used to define the new Scilab interface routine (interface code, user routines or libraries, system libraries).</li> +<li><tt><b>spname</b></tt>: a character string. Name of interface routine entry point.</li> +<li><tt><b>fcts</b></tt>: vector of character strings. The name of new Scilab function implemented in the new interface.</li> +</ul> + + <p> After you run the command "exec loader.sce", you could use the module. </pre> @@ -176,16 +194,55 @@ <H3><a name="scilab_nn10"></a>27.3.3 Global variables</H3> <p> - To expose variables, SWIG actually generates two functions, to get and set the value. In this case, Foo_set and Foo_set would be generated. SWIG then automatically calls these functions when you get and set the variable-- in the former case creating a local copy in the interpreter of the C variables, and in the latter case copying an interpreter variables onto the C variable. + To expose variables, SWIG actually generates two functions, to get and set the value. In this case, Foo_set and Foo_get would be generated. SWIG then automatically calls these functions when you get and set the variable-- in the former case creating a local copy in the interpreter of the C variables, and in the latter case copying an interpreter variables onto the C variable. </p> <div class="targetlang"><pre>scilab:1> exec loader.sce; -scilab:2> c=Foo -c = 3 -scilab:3> Foo=4; +scilab:2> c=Foo_get(); + +scilab:3> Foo_set(4); + scilab:4> c c = 3 -scilab:5> Foo + +scilab:5> Foo_get() ans = 4</pre></div> +<H3><a name="Scilab_nn11"></a>27.3.4 Constants</H3> +<p> + C constants are not really constant in Scilab. They are actually just a copy of the value into the Scilab interpreter. Therefore they can be changed just as any other value. For example given some constants: +</p> + + <div class="code"><pre>%module example +%constant int ICONST=42; +#define SCONST "Hello World" +</pre></div> + +<p> + This is 'effectively' converted into the following code in the wrapper file: +</p> + + <div class="code"><pre>.... +const int ICONST=42; +const char * SCONST="Hello World"; +.... +int ICONST_get (char *fname,unsigned long fname_len) {..} +int SCONST_get (char *fname,unsigned long fname_len) {..} +.... </pre></div> +<p>It is easy to use the C constants as global variables:</p> + + <div class="targetlang"><pre> +scilab:1> ICONST +ant = 42 + +scilab:2> SCONST +ant= Hello world + +scilab:3> c=SCONST() +c = Hello World +</pre></div> + + + + Modified: branches/gsoc2009-sploving/Examples/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/Makefile.in 2009-06-07 19:31:37 UTC (rev 11250) +++ branches/gsoc2009-sploving/Examples/Makefile.in 2009-06-13 12:18:35 UTC (rev 11251) @@ -1135,3 +1135,28 @@ rm -f *.@OBJEXT@ *@SO@ NAMESPACE rm -f $(RRSRC) runme.Rout .RData +################################################################## +##### SCILAB ###### +################################################################## + +# Make sure these locate your Octave installation +SCILAB_INCLUDE= $(DEFS) @SCILABINCLUDE@ +SCILAB_LIB = @SCILABLIB@ +SCILAB = @SCILAB@ + + +# ---------------------------------------------------------------- +# Build a C dynamically loadable module +# ---------------------------------------------------------------- + +scilab: $(SRCS) + $(SWIG) -scilab $(SWIGOPT) $(INTERFACEPATH) + + +# ----------------------------------------------------------------- +# Cleaning the scilab examples +# ----------------------------------------------------------------- + +scilab_clean: + rm -f *_wrap* + Added: branches/gsoc2009-sploving/Examples/scilab/constants/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/constants/example.i 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1,27 @@ +/* File : example.i */ +%module example + +/* A few preprocessor macros */ + +#define ICONST 42 +#define FCONST 2.1828 +#define CCONST 'x' +#define CCONST2 '\n' +#define SCONST "Hello World" +#define SCONST2 "\"Hello World\"" + +/* This should work just fine */ +#define EXPR ICONST + 3*(FCONST) + +/* This shouldn't do anything */ +#define EXTERN extern + +/* Neither should this (BAR isn't defined) */ +#define FOO (ICONST + BAR) + +/* The following directives also produce constants */ + +%constant int iconst = 37; +%constant double fconst = 3.14; + + Added: branches/gsoc2009-sploving/Examples/scilab/constants/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/constants/makefile 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1,15 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.i +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c + +check: all Added: branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1,32 @@ +// builder the *.so +exec builder.sce; + +//loader the *.so +exec loader.sce; + +printf("ICONST = %i (should be 42)\n", ICONST()); +printf("FCONST = %f (should be 2.1828)\n", FCONST()); +printf("CCONST = %c (should be x)\n", CCONST()); +printf("CCONST2 = %s (this should be on a new line)\n", CCONST2()); +printf("SCONST = %s (should be Hello World)\n", SCONST()); +printf("SCONST2 = %s (should be Hello World)\n", SCONST2()); +printf("EXPR = %f (should be 48.5484)\n", EXPR()); +printf("iconst = %i (should be 37)\n", iconst()); +printf("fconst = %f (should be 3.14)\n", fconst()); + +try + printf("EXTERN = %s (Arg! This should not printf(anything)\n", EXTERN()); +catch + printf("EXTERN is not defined (good)\n"); + +try + printf("FOO = %i (Arg! This should not printf(anything)\n", FOO()); +catch + printf("FOO is not defined (good)\n"); + + + + + + + Added: branches/gsoc2009-sploving/Examples/scilab/simple/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/simple/makefile 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1,15 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c + +check: all Modified: branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-06-07 19:31:37 UTC (rev 11250) +++ branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-06-13 12:18:35 UTC (rev 11251) @@ -5,6 +5,7 @@ exec loader.sce; // Call our gcd() function + x = 42; y = 105; g = gcd(x,y); @@ -16,8 +17,8 @@ Foo_get() // Change its value -Foo_set = 3.1415926 +Foo_set(3.1415926) //See if the change took effect -Foo_get +Foo_get() Added: branches/gsoc2009-sploving/Examples/scilab/variables/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.c (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1,46 @@ +/* File : example.c */ + +/* I'm a file containing some C global variables */ + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +#include <stdio.h> +#include <stdlib.h> +#include "sciprint.h" + +int ivar = 0; +short svar = 0; +long lvar = 0; +unsigned int uivar = 0; +unsigned short usvar = 0; +unsigned long ulvar = 0; +signed char scvar = 0; +unsigned char ucvar = 0; +char cvar = 0; +float fvar = 0; +double dvar = 0; +char *strvar=0; + + +/* A debugging function to print out their values */ + +void print_vars() { + sciprint("ivar = %d\n", ivar); + sciprint("svar = %d\n", svar); + sciprint("lvar = %ld\n", lvar); + sciprint("uivar = %u\n", uivar); + sciprint("usvar = %u\n", usvar); + sciprint("ulvar = %lu\n", ulvar); + sciprint("scvar = %d\n", scvar); + sciprint("ucvar = %u\n", ucvar); + sciprint("fvar = %g\n", fvar); + sciprint("dvar = %g\n", dvar); + sciprint("cvar = %c\n", cvar); + sciprint("strvar = %s\n",strvar); +} + + + Added: branches/gsoc2009-sploving/Examples/scilab/variables/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.i 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1,27 @@ +/* File : example.i */ +%module example + +#pragma SWIG nowarn=SWIGWARN_TYPEMAP_SWIGTYPELEAK + +/* Some global variable declarations */ +%inline %{ + extern int ivar; + extern short svar; + extern long lvar; + extern unsigned int uivar; + extern unsigned short usvar; + extern unsigned long ulvar; + extern signed char scvar; + extern unsigned char ucvar; + extern char cvar; + extern float fvar; + extern double dvar; + extern char *strvar; +%} + + +/* Some helper functions to make it easier to test */ +%inline %{ +extern void print_vars(); +%} + Added: branches/gsoc2009-sploving/Examples/scilab/variables/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/variables/makefile 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1,15 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c + +check: all Added: branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1,45 @@ +// builder the *.so +exec builder.sce + +//loader the *.so +exec loader.sce + +// Try to set the values of some global variables + +ivar_set (42); +svar_set (31000); +lvar_set (65537); +uivar_set (123456); +usvar_set (61000); +ulvar_set (654321); +scvar_set (-13); +ucvar_set (251); +cvar_set ("S"); +fvar_set (3.14159); +dvar_set (2.1828); +strvar_set("Hello World"); + +// Now print out the values of the variables + +printf("Variables (values printed from Scilab)\n"); + +printf("ivar = %i\n", ivar_get()); +printf("svar = %i\n", svar_get()); +printf("lvar = %i\n", lvar_get()); +printf("uivar = %i\n", uivar_get()); +printf("usvar = %i\n", usvar_get()); +printf("ulvar = %i\n", ulvar_get()); +printf("scvar = %i\n", scvar_get()); +printf("ucvar = %i\n", ucvar_get()); +printf("fvar = %f\n", fvar_get()); +printf("dvar = %f\n", dvar_get()); +printf("cvar = %s\n", cvar_get()); +printf("strvar = %s\n", strvar_get()); + +printf("\nVariables (values printed from C)\n"); + +print_vars() + + + + Modified: branches/gsoc2009-sploving/Lib/scilab/scilab.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scilab.swg 2009-06-07 19:31:37 UTC (rev 11250) +++ branches/gsoc2009-sploving/Lib/scilab/scilab.swg 2009-06-13 12:18:35 UTC (rev 11251) @@ -1,5 +1,5 @@ %include <typemaps/swigmacros.swg> %include <typemaps/fragments.swg> -%include <sciprimtype.swg> +%include <sciprimtypes.swg> %include <scitypemaps.swg> Added: branches/gsoc2009-sploving/Lib/scilab/sciprimtypes.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/sciprimtypes.swg (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/sciprimtypes.swg 2009-06-13 12:18:35 UTC (rev 11251) @@ -0,0 +1 @@ + Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-07 19:31:37 UTC (rev 11250) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-13 12:18:35 UTC (rev 11251) @@ -12,131 +12,115 @@ //%include <typemaps/swigtypemaps.swg> -%typemap(in) char (int *piAddrVar, int iRows, int iCols), - signed char (int *piAddrVar, int iRows, int iCols), - unsigned char(int *piAddrVar, int iRows, int iCols) -{ - char* _piData8; - getVarAddressFromNumber($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if(getVarType(piAddrVar) != sci_matrix || iRows1 != 1 || iCols1 != 1 || isVarComplex(piAddrVar)) - { - Scierror(999,_("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); - } - getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData8); - $1=_piData8[0]; +%typemap(in) signed char (int *piAddrVar, int iRows, int iCols), + unsigned char (int *piAddrVar, int iRows, int iCols), + short (int *piAddrVar, int iRows, int iCols), + unsigned short (int *piAddrVar, int iRows, int iCols), + int (int *piAddrVar, int iRows, int iCols), + unsigned int (int *piAddrVar, int iRows, int iCols), + long (int *piAddrVar, int iRows, int iCols), + unsigned long (int *piAddrVar, int iRows, int iCols), + float (int *piAddrVar, int iRows, int iCols), + double (int *piAddrVar, int iRows, int iCols) { + double* _piData; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + $1=($1_ltype)*_piData; } -%typemap(in) short (int *piAddrVar, int iRows, int iCols), - unsigned short (int *piAddrVar, int iRows, int iCols) - -{ short* _piData16; - getVarAddressFromNumber($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if(getVarType(piAddrVar) != sci_matrix || iRows1 != 1 || iCols1 != 1 || isVarComplex(piAddrVar)) - { - Scierror(999,_("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); - } - getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData16); - $1= _piData16[0]; +%typemap(in) char (int *piAddrVar, int iRows, int iCols) { + char* _pstStrings; + int _piLength; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + $1=($1_ltype)*_pstStrings; } -%typemap(in) int (int *piAddrVar, int iRows, int iCols), - unsigned int (int *piAddrVar, int iRows, int iCols) - -{ int* _piData32; - getVarAddressFromNumber($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if(getVarType(piAddrVar) != sci_matrix || iRows1 != 1 || iCols1 != 1 || isVarComplex(piAddrVar)) - { - Scierror(999,_("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); - } - getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData32); - $1= _piData32[0]; - +%typemap(out) signed char (int iRowsOut,int iColsOut,int* _piAddress) { + char temp; + temp=(char)$1; + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger8(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(1)=Rhs+1; } -%typemap(in) long(int* piAddrVar,int iRows,int iCols), - unsigned long(int* piAddrVar,int iRows,int iCols), - double(int* piAddrVar,int iRows,int iCols), - float (int* piAddrVar,int iRows,int iCols) - -{ double *pdblReal; - getVarAddressFromNumber($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if(getVarType(piAddrVar) != sci_matrix || iRows1 != 1 || iCols1 != 1 || isVarComplex(piAddrVar)) - { - Scierror(999,_("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); - } - getMatrixOfDouble(piAddrVar, &iRows, &iCols, &pdblReal); - $1= pdblReal[0]; - +%typemap(out) short (int iRowsOut,int iColsOut,int* _piAddress), + unsigned char (int iRowsOut,int iColsOut,int* _piAddress) { + short temp; + temp=(short)$1; + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger16(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(1)=Rhs+1; } -/* -%typemap(in) char *(int m,int n,int l) -{ - if (GetType($argnum) == sci_strings) - { - GetRhsVar($argnum,STRING_DATATYPE,&m,&n,&l); - $1=($1_ltype)strdup(cstk(l)); - } - else - Scierror(999,"error ...\n"); - -}*/ - - -%typemap(out) char (int iRowsOut,int iColsOut,int* _piAddress), - signed char (int iRowsOut,int iColsOut,int* _piAddress), - unsigned char(int iRowsOut,int iColsOut,int* _piAddress) -{ +%typemap(out) int (int iRowsOut,int iColsOut,int* _piAddress), + unsigned int (int iRowsOut,int iColsOut,int* _piAddress), + unsigned short (int iRowsOut,int iColsOut,int* _piAddress), + unsigned long (int iRowsOut,int iColsOut,int* _piAddress), + long (int iRowsOut,int iColsOut,int* _piAddress) { + int temp; + temp=(int)$1; iRowsOut=1; iColsOut=1; - createMatrixOfInteger8(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); + createMatrixOfInteger32(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); LhsVar(1)=Rhs+1; - PutLhsVar(); } -%typemap(out) short (int iRowsOut,int iColsOut,int* _piAddress), - unsigned short(int iRowsOut,int iColsOut,int* _piAddress) - -{ - iRowsOut=1; - iColsOut=1; - createMatrixOfInteger16(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); - LhsVar(1)=Rhs+1; - PutLhsVar(); + +%typemap(out) double (int iRowsOut,int iColsOut,int* _piAddress), + float (int iRowsOut,int iColsOut,int* _piAddress) { + double temp; + temp=(double)$1; + iRowsOut=1; + iColsOut=1; + createMatrixOfDouble(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(1)=Rhs+1; } -%typemap(out) int (int iRowsOut,int iColsOut,int* _piAddress), - unsigned int(int iRowsOut,int iColsOut,int* _piAddress) - -{ - iRowsOut=1; - iColsOut=1; - createMatrixOfInteger32(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); - LhsVar(1)=Rhs+1; - PutLhsVar(); +%typemap(out) char (int iRowsOut,int iColsOut,int* _piAddress) { + char* temp; + temp=(char*)&$1; + iRowsOut=1; + iColsOut=1; + createMatrixOfString(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(1)=Rhs+1; } -%typemap(out) long(int iRowsOut,int iColsOut,int* _piAddress), - unsigned long(int iRowsOut,int iColsOut,int* _piAddress), - double(int iRowsOut,int iColsOut,int* _piAddress), - float(int iRowsOut,int iColsOut,int* _piAddress) -{ - iRowsOut=1; - iColsOut=1; - createMatrixDouble(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); - LhsVar(1)=Rhs+1; - PutLhsVar(); +%typemap(out,noblock=1) void { } +%typemap(in) char *(int *piAddrVar, int iRows, int iCols) { + char* _pstStrings; + int _piLength; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + $1=strdup(_pstStrings); +} -%typemap(out,noblock=1) void -{ +%typemap(out) char *(int iRowsOut,int iColsOut,int* _piAddress){ + iRowsOut=1; + iColsOut=1; + createMatrixOfString(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); + LhsVar(1)=Rhs+1; } Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-07 19:31:37 UTC (rev 11250) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-13 12:18:35 UTC (rev 11251) @@ -72,7 +72,7 @@ f_begin = NewFile(outfile, "w", SWIG_output_files()); /*Another output file to generate the .so or .dll */ - String *builder = NewString("builder.sce"); + String *builder = NewStringf("%sbuilder.sce",SWIG_output_directory()); f_builder=NewFile(builder,"w",SWIG_output_files()); /* Initialize all of the output files */ @@ -99,7 +99,10 @@ Printf(f_runtime, "#include \"stack-c.h\"\n"); Printf(f_runtime, "#include \"sciprint.h\"\n"); Printf(f_runtime, "#include \"Scierror.h\"\n"); + Printf(f_runtime, "#include \"variable_api.h\"\n"); + Printf(f_runtime, "#include \"localization.h\"\n"); + /*Initialize the builder.sce file*/ Printf(f_builder,"ilib_name = \"%slib\";\n",module); Printf(f_builder,"files = [\"%s\",\"%s.o\"];\n", outfile,module); @@ -166,7 +169,7 @@ if (overloaded) Append(overname, Getattr(n, "sym:overname")); - Printv(f->def, "int ", overname, " (char *fname){", NIL); + Printv(f->def, "int ", overname, " (char *fname,unsigned long fname_len) {", NIL); // Emit all of the local variables for holding arguments emit_parameter_variables(l, f); @@ -209,8 +212,8 @@ } String *getargs = NewString(""); Printv(getargs, tm, NIL); - Printv(f->code, getargs, "\n", NIL); - Delete(getargs); + Printv(f->code, getargs, "\n", NIL); + Delete(getargs); p = Getattr(p, "tmap:in:next"); continue; } else { @@ -228,22 +231,19 @@ //Insert the return variable emit_return_variable(n, d, f); - if ((tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode))) { + if ((tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode))) { Printf(f->code, "%s\n", tm); } - else { - Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, "Unable to use return type %s in function %s.\n", SwigType_str(d, 0), iname); + else { + Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, "Unable to use return type %s in function %s.\n", SwigType_str(d, 0), iname); } /* Insert argument output code */ String *outarg = NewString(""); for (p = l; p;) { if ((tm = Getattr(p, "tmap:argout"))) { - Replaceall(tm, "$result", "_outp"); - //Replaceall(tm, "$arg", Getattr(p, "emit:input")); - //Replaceall(tm, "$input", Getattr(p, "emit:input")); Printv(outarg, tm, "\n", NIL); p = Getattr(p, "tmap:argout:next"); } else { @@ -290,21 +290,20 @@ String *getname = Swig_name_get(iname); String *setname = Swig_name_set(iname); - Printv(setf->def, "int ", setname, " (char *fname){", NIL); + Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {", NIL); Wrapper_add_local(setf, "piAddrVar", "int *piAddrVar"); Wrapper_add_local(setf, "iRows", "int iRows"); Wrapper_add_local(setf, "iCols", "int iCols"); - // Wrapper_add_local(setf, "pdblReal", "double *pdblReal"); + - if (is_assignable(n)) { Setattr(n, "wrap:name", setname); if ((tm = Swig_typemap_lookup("in", n, name, 0))) { Replaceall(tm, "$source", "args(0)"); Replaceall(tm, "$target", name); Replaceall(tm, "$input", "args(0)"); - Replaceall(tm, "$argnum", "1"); + Replaceall(tm, "$argnum", "1"); //if (Getattr(n, "tmap:varin:implicitconv")) { //Replaceall(tm, "$implicitconv", get_implicitconv_flag(n)); //} @@ -319,11 +318,11 @@ } Append(setf->code, "}\n"); Wrapper_print(setf, f_wrappers); - Printf(f_builder, "\"%s\",\"%s\";",iname,setname); + Printf(f_builder, "\"%s\",\"%s\";",setname,setname); Setattr(n, "wrap:name", getname); int addfail = 0; - Printv(getf->def, "int ", getname, " (char *fname){", NIL); + Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len){", NIL); Wrapper_add_local(getf, "piAddrOut", "int* _piAddress"); Wrapper_add_local(getf, "iRows", "int iRowsOut"); @@ -338,20 +337,59 @@ } else { Swig_warning(WARN_TYPEMAP_VAROUT_UNDEF, input_file, line_number, "Unable to read variable of type %s\n", SwigType_str(t, 0)); } - //Append(getf->code, " return obj;\n"); - //if (addfail) { - //Append(getf->code, "fail:\n"); - //Append(getf->code, " return octave_value_list();\n"); - //} + Append(getf->code, "}\n"); Wrapper_print(getf, f_wrappers); - Printf(f_builder, "\"%s\",\"%s\";",iname,getname); + Printf(f_builder, "\"%s\",\"%s\";",getname,getname); return SWIG_OK; } + /* ----------------------------------------------------------------------- + * constantWrapper() + * ----------------------------------------------------------------------- */ + + virtual int constantWrapper(Node *n) { + String *name = Getattr(n, "name"); + String *iname = Getattr(n, "sym:name"); + SwigType *type = Getattr(n, "type"); + String *rawval = Getattr(n, "rawval"); + String *value = rawval ? rawval : Getattr(n, "value"); + String *tm; + + if (!addSymbol(iname, n)) + return SWIG_ERROR; + + Wrapper *getf = NewWrapper(); + String *getname = Swig_name_get(iname); + + Setattr(n, "wrap:name", getname); + Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len) {", NIL); + + Wrapper_add_local(getf, "piAddrOut", "int* _piAddress"); + Wrapper_add_local(getf, "iRows", "int iRowsOut"); + Wrapper_add_local(getf, "iColsOut", "int iColsOut "); + + if ((tm = Swig_typemap_lookup("out", n, name, 0))) { + Replaceall(tm, "$source", name); + Replaceall(tm, "$target", "obj"); + Replaceall(tm, "$result", "obj"); + emit_action_code(n, getf->code, tm); + Delete(tm); + } else { + Swig_warning(WARN_TYPEMAP_VAROUT_UNDEF, input_file, line_number, "Unable to read variable of type %s\n", SwigType_str(type, 0)); + } + + Append(getf->code, "}\n"); + Wrapper_print(getf, f_wrappers); + Printf(f_header, "const %s %s=%s;\n",SwigType_str(type,0),iname,value); + Printf(f_builder, "\"%s\",\"%s\";",iname,getname); + + return SWIG_OK; + } + }; extern "C" Language *swig_scilab(void) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-06-20 02:44:12
|
Revision: 11288 http://swig.svn.sourceforge.net/swig/?rev=11288&view=rev Author: sploving Date: 2009-06-20 02:44:06 +0000 (Sat, 20 Jun 2009) Log Message: ----------- add support for Enums Modified Paths: -------------- branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Examples/octave/contract/runme.m branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci branches/gsoc2009-sploving/Examples/scilab/variables/example.c branches/gsoc2009-sploving/Lib/scilab/scilab.swg branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/scilab/contract/ branches/gsoc2009-sploving/Examples/scilab/contract/example.c branches/gsoc2009-sploving/Examples/scilab/contract/example.i branches/gsoc2009-sploving/Examples/scilab/contract/makefile branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci branches/gsoc2009-sploving/Examples/scilab/enum/ branches/gsoc2009-sploving/Examples/scilab/enum/example.c branches/gsoc2009-sploving/Examples/scilab/enum/example.h branches/gsoc2009-sploving/Examples/scilab/enum/example.i branches/gsoc2009-sploving/Examples/scilab/enum/makefile branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg branches/gsoc2009-sploving/Lib/scilab/typemaps.i Modified: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-06-20 00:32:49 UTC (rev 11287) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-06-20 02:44:06 UTC (rev 11288) @@ -24,6 +24,7 @@ <li><a href="#Scilab_nn9">Functions</a> <li><a href="#scilab_nn10">Global variables</a> <li><a href="#Scilab_nn11">Constants</a> +<li><a href="#Scilab_nn12">Enums</a> </ul> </ul> </div> @@ -215,34 +216,85 @@ </p> <div class="code"><pre>%module example -%constant int ICONST=42; +#define ICONST 42 +#define FCONST 2.1828 +#define CCONST 'x' +#define CCONST2 '\n' #define SCONST "Hello World" +#define SCONST2 "\"Hello World\"" </pre></div> <p> - This is 'effectively' converted into the following code in the wrapper file: + A file called example.sce will be created, which could be interpreted by the scilab. The code in the file is as following: </p> <div class="code"><pre>.... -const int ICONST=42; -const char * SCONST="Hello World"; -.... -int ICONST_get (char *fname,unsigned long fname_len) {..} -int SCONST_get (char *fname,unsigned long fname_len) {..} +example.ICONST = 42 +example.FCONST = 2.1828 +example.CCONST = ascii(120) +example.CCONST2 = ascii(10) +example.SCONST = "Hello World" +example.SCONST2 = """Hello World""" +example.EXPR = 42+3*(2.1828) +example.iconst = 37 +example.fconst = 3.14 .... </pre></div> -<p>It is easy to use the C constants as global variables:</p> +<p>It is easy to use the C constants after run the command "exec example.sce":</p> <div class="targetlang"><pre> -scilab:1> ICONST -ant = 42 +scilab:1> exec example.sce; +scilab:2> example.ICONST +ans= 42 +scilab:3> example.FCONST +ans= 2.1828 +scilab:4> example.CCONST +ans=x +scilab:5> example.CCONST2 +ans= -scilab:2> SCONST -ant= Hello world +scilab:6> example.SCONST +ans= Hello World +scilab:7> example.SCONST2 +ans= "Hello World" +scilab:8> example.EXPR +ans= 48.5484 +scilab:9> example.iconst +ans= 37 +scilab:10> example.fconst +ans= 3.14 +</pre></div> -scilab:3> c=SCONST() -c = Hello World +<H3><a name="Scilab_nn12"></a>27.3.5 Enums</H3> + +<p> The way that deals with the enums is similar to the constants. For example: +</p> + + <div class="code"><pre>%module example +typedef enum { RED, BLUE, GREEN } color; </pre></div> +<p> + A file called example.sce will be created, which could be interpreted by the scilab. The code in the file is as following: +</p> + <div class="code"><pre>.... +color.RED=0; +color.BLUE=color.RED + 1; +color.GREEN=color.BLUE + 1; +.... </pre></div> +<p>It is easy to use the enums after run the command "exec example.sce":</p> + <div class="targetlang"><pre> +scilab:1> exec example.sce; +scilab:2> printf(" RED = %i\n", color.RED); + RED = 0 +scilab:3> printf(" BLUE = %i\n", color.BLUE); + BLUE = 1 + +scilab:4> printf(" GREEN = %i\n", color.GREEN); + GREEN = 2 +</pre></div> + + + Modified: branches/gsoc2009-sploving/Examples/octave/contract/runme.m =================================================================== --- branches/gsoc2009-sploving/Examples/octave/contract/runme.m 2009-06-20 00:32:49 UTC (rev 11287) +++ branches/gsoc2009-sploving/Examples/octave/contract/runme.m 2009-06-20 02:44:06 UTC (rev 11288) @@ -4,7 +4,7 @@ # Call our gcd() function -x = 42; +x = -2; y = 105; g = example.gcd(x,y); printf("The gcd of %d and %d is %d\n",x,y,g); Modified: branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-06-20 00:32:49 UTC (rev 11287) +++ branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-06-20 02:44:06 UTC (rev 11288) @@ -1,32 +1,22 @@ -// builder the *.so -exec builder.sce; +exec example.sce; -//loader the *.so -exec loader.sce; +printf("ICONST = %i (should be 42)\n", example.ICONST); +printf("FCONST = %f (should be 2.1828)\n",example. FCONST); +printf("CCONST = %c (should be ''x'')\n", example.CCONST); +printf("CCONST2 = %s (this should be on a new line)\n", example.CCONST2); +printf("SCONST = %s (should be ''Hello World'')\n", example.SCONST); +printf("SCONST2 = %s (should be "'""Hello World"""')\n", example.SCONST2); +printf("EXPR = %f (should be 48.5484)\n",example.EXPR); +printf("iconst = %i (should be 37)\n", example.iconst); +printf("fconst = %f (should be 3.14)\n", example.fconst); -printf("ICONST = %i (should be 42)\n", ICONST()); -printf("FCONST = %f (should be 2.1828)\n", FCONST()); -printf("CCONST = %c (should be x)\n", CCONST()); -printf("CCONST2 = %s (this should be on a new line)\n", CCONST2()); -printf("SCONST = %s (should be Hello World)\n", SCONST()); -printf("SCONST2 = %s (should be Hello World)\n", SCONST2()); -printf("EXPR = %f (should be 48.5484)\n", EXPR()); -printf("iconst = %i (should be 37)\n", iconst()); -printf("fconst = %f (should be 3.14)\n", fconst()); - try - printf("EXTERN = %s (Arg! This should not printf(anything)\n", EXTERN()); + printf("EXTERN = %s (Arg! This should not printf(anything)\n", example.EXTERN); catch - printf("EXTERN is not defined (good)\n"); - + printf("EXTERN is not defined (good)\n"); +end try - printf("FOO = %i (Arg! This should not printf(anything)\n", FOO()); + printf("FOO = %i (Arg! This should not printf(anything)\n", example.FOO); catch - printf("FOO is not defined (good)\n"); - - - - - - - + printf("FOO is not defined (good)\n"); +end Added: branches/gsoc2009-sploving/Examples/scilab/contract/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/example.c (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/contract/example.c 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,23 @@ +/* File : example.c */ + +/* A global variable */ +double Foo = 3.0; + +/* Compute the greatest common divisor of positive integers */ +int gcd(int x, int y) { + int g; + g = y; + while (x > 0) { + g = x; + x = y % x; + y = g; + } + return g; +} + +int fact(int n) { + if (n <= 0) return 1; + return n*fact(n-1); +} + + Added: branches/gsoc2009-sploving/Examples/scilab/contract/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/contract/example.i 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,21 @@ +/* File : example.i */ +%module example + +%contract gcd(int x, int y) { +require: + x >= 0; + y >= 0; +} + +%contract fact(int n) { +require: + n >= 0; +ensure: + fact >= 1; +} + +%inline %{ +extern int gcd(int x, int y); +extern int fact(int n); +extern double Foo; +%} Added: branches/gsoc2009-sploving/Examples/scilab/contract/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/contract/makefile 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,15 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c + +check: all Added: branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,34 @@ +// builder the *.so +exec builder.sce; + +// loader the *.so +exec loader.sce; + +// Call our gcd() function +x = 42; +y = 105; +g = gcd(x,y); +printf("The gcd of %d and %d is %d\n",x,y,g); + +// Call our fact() function +x=5; +g=fact(x); +printf("The fact of %d is %d",x,g); + +// Manipulate the Foo global variable + +// Output its current value +printf("Foo = %f\n",Foo_get()); + +// Change its value +Foo_set (3.1415926); + +// See if the change took effect +printf("Foo = %f\n", Foo_get()); + +//Call our gcd() function to test the contract conditon +x=-42; +y=105; +g=gcd(x,y); +printf("The gcd of %d and %d is %d\n",x,y,g); + Added: branches/gsoc2009-sploving/Examples/scilab/enum/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/example.c (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/enum/example.c 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,16 @@ +/* File : example.c */ + +#include "example.h" +#include <stdio.h> + +void enum_test(color c) { + if (c == RED) { + sciprint("color = RED, "); + } else if (c == BLUE) { + sciprint("color = BLUE, "); + } else if (c == GREEN) { + sciprint("color = GREEN, "); + } else { + sciprint("color = Unknown color!, "); + } +} Added: branches/gsoc2009-sploving/Examples/scilab/enum/example.h =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/example.h (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/enum/example.h 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,6 @@ +/* File : example.h */ + +typedef enum { RED, BLUE, GREEN } color; + +void enum_test(color c); + Added: branches/gsoc2009-sploving/Examples/scilab/enum/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/enum/example.i 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,11 @@ +/* File : example.i */ +%module example + +%{ +#include "example.h" +%} + +/* Let's just grab the original header file here */ + +%include "example.h" + Added: branches/gsoc2009-sploving/Examples/scilab/enum/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/enum/makefile 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,15 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c + +check: all Added: branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,22 @@ +// builder the *.so +exec builder.sce; + +// loader the *.so +exec loader.sce; + +exec example.sce; + +// Print out the value of some enums +printf("*** color ***\n"); +printf(" RED = %i\n", color.RED); +printf(" BLUE = %i\n", color.BLUE); +printf(" GREEN = %i\n", color.GREEN); + + +printf("\nTesting use of enums with functions\n"); + +enum_test(color.RED); +enum_test(color.BLUE); +enum_test(color.GREEN); +enum_test(1234); + Modified: branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-06-20 00:32:49 UTC (rev 11287) +++ branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-06-20 02:44:06 UTC (rev 11288) @@ -1,7 +1,7 @@ // builder the *.so exec builder.sce; -//loader the *.so +// loader the *.so exec loader.sce; // Call our gcd() function @@ -11,7 +11,7 @@ g = gcd(x,y); printf("The gcd of %d and %d is %d\n",x,y,g); -//Manipulate the Foo global variable +// Manipulate the Foo global variable // Output its current value Foo_get() @@ -19,6 +19,6 @@ // Change its value Foo_set(3.1415926) -//See if the change took effect +// See if the change took effect Foo_get() Modified: branches/gsoc2009-sploving/Examples/scilab/variables/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-06-20 00:32:49 UTC (rev 11287) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-06-20 02:44:06 UTC (rev 11288) @@ -28,18 +28,18 @@ /* A debugging function to print out their values */ void print_vars() { - sciprint("ivar = %d\n", ivar); - sciprint("svar = %d\n", svar); - sciprint("lvar = %ld\n", lvar); - sciprint("uivar = %u\n", uivar); - sciprint("usvar = %u\n", usvar); - sciprint("ulvar = %lu\n", ulvar); - sciprint("scvar = %d\n", scvar); - sciprint("ucvar = %u\n", ucvar); - sciprint("fvar = %g\n", fvar); - sciprint("dvar = %g\n", dvar); - sciprint("cvar = %c\n", cvar); - sciprint("strvar = %s\n",strvar); + printf("ivar = %d\n", ivar); + printf("svar = %d\n", svar); + printf("lvar = %ld\n", lvar); + printf("uivar = %u\n", uivar); + printf("usvar = %u\n", usvar); + printf("ulvar = %lu\n", ulvar); + printf("scvar = %d\n", scvar); + printf("ucvar = %u\n", ucvar); + printf("fvar = %g\n", fvar); + printf("dvar = %g\n", dvar); + printf("cvar = %c\n", cvar); + printf("strvar = %s\n",strvar); } Modified: branches/gsoc2009-sploving/Lib/scilab/scilab.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scilab.swg 2009-06-20 00:32:49 UTC (rev 11287) +++ branches/gsoc2009-sploving/Lib/scilab/scilab.swg 2009-06-20 02:44:06 UTC (rev 11288) @@ -1,5 +1,6 @@ %include <typemaps/swigmacros.swg> %include <typemaps/fragments.swg> +%include <sciruntime.swg> %include <sciprimtypes.swg> %include <scitypemaps.swg> Added: branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,9 @@ +%insert(runtime) %{ + +void SWIG_Error(int code, const char *msg) { + Scierror(code,_("%s\n"),msg); +} + +#define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(999, msg); } else + +%} Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-20 00:32:49 UTC (rev 11287) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-20 02:44:06 UTC (rev 11288) @@ -11,7 +11,11 @@ // Include the unified typemap library //%include <typemaps/swigtypemaps.swg> +/* ----------------------------------------------------------------------------- + * --- Input arguments --- + * ----------------------------------------------------------------------------- */ +/* Basic C types */ %typemap(in) signed char (int *piAddrVar, int iRows, int iCols), unsigned char (int *piAddrVar, int iRows, int iCols), short (int *piAddrVar, int iRows, int iCols), @@ -44,26 +48,75 @@ } getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); $1=($1_ltype)*_pstStrings; +} +/* Pointers */ +%typemap(in) signed char *(int *piAddrVar, int iRows, int iCols, signed char temp), + unsigned char *(int *piAddrVar, int iRows, int iCols, unsigned char temp), + short *(int *piAddrVar, int iRows, int iCols, short temp), + unsigned short *(int *piAddrVar, int iRows, int iCols, unsigned short temp), + int *(int *piAddrVar, int iRows, int iCols, int temp), + unsigned int *(int *piAddrVar, int iRows, int iCols, unsigned int temp), + long *(int *piAddrVar, int iRows, int iCols, long temp), + unsigned long *(int *piAddrVar, int iRows, int iCols, unsigned long temp), + float *(int *piAddrVar, int iRows, int iCols, float temp), + double *(int *piAddrVar, int iRows, int iCols, double temp) { + double* _piData; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); + memcpy($1,_piData,iRows*iCols*sizeof($*1_ltype)); + //temp=($*1_ltype)*_piData; + //$1=&temp; } +%typemap(in) char *(int *piAddrVar, int iRows, int iCols) { + char* _pstStrings; + int _piLength; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + $1=strdup(_pstStrings); +} + +/* ----------------------------------------------------------------------------- + * --- Output arguments --- + * ----------------------------------------------------------------------------- */ + +/* Basic C types */ %typemap(out) signed char (int iRowsOut,int iColsOut,int* _piAddress) { char temp; - temp=(char)$1; + temp=(char)($result); iRowsOut=1; iColsOut=1; - createMatrixOfInteger8(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); - LhsVar(1)=Rhs+1; + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; } %typemap(out) short (int iRowsOut,int iColsOut,int* _piAddress), unsigned char (int iRowsOut,int iColsOut,int* _piAddress) { short temp; - temp=(short)$1; + temp=(short)($result); iRowsOut=1; iColsOut=1; - createMatrixOfInteger16(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); - LhsVar(1)=Rhs+1; + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; } %typemap(out) int (int iRowsOut,int iColsOut,int* _piAddress), @@ -71,56 +124,104 @@ unsigned short (int iRowsOut,int iColsOut,int* _piAddress), unsigned long (int iRowsOut,int iColsOut,int* _piAddress), long (int iRowsOut,int iColsOut,int* _piAddress) { - int temp; - temp=(int)$1; - iRowsOut=1; - iColsOut=1; - createMatrixOfInteger32(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); - LhsVar(1)=Rhs+1; + int temp; + temp=(int)($result); + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; } - %typemap(out) double (int iRowsOut,int iColsOut,int* _piAddress), float (int iRowsOut,int iColsOut,int* _piAddress) { double temp; - temp=(double)$1; + temp=(double)($result); iRowsOut=1; iColsOut=1; - createMatrixOfDouble(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); - LhsVar(1)=Rhs+1; + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; } %typemap(out) char (int iRowsOut,int iColsOut,int* _piAddress) { char* temp; - temp=(char*)&$1; + temp=(char*)&($result); iRowsOut=1; iColsOut=1; - createMatrixOfString(Rhs+1, iRowsOut, iColsOut, &temp, &_piAddress); - LhsVar(1)=Rhs+1; + createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; } - %typemap(out,noblock=1) void { } -%typemap(in) char *(int *piAddrVar, int iRows, int iCols) { - char* _pstStrings; - int _piLength; - getVarAddressFromNumber($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - - if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); - } - getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); - $1=strdup(_pstStrings); +/* Pointers */ +%typemap(out) signed char *(int iRowsOut,int iColsOut,int* _piAddress) { + char *temp; + temp=(char *)($result); + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; } +%typemap(out) short *(int iRowsOut,int iColsOut,int* _piAddress), + unsigned char *(int iRowsOut,int iColsOut,int* _piAddress) { + short *temp; + temp=(short *)($result); + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; +} + +%typemap(out) int *(int iRowsOut,int iColsOut,int* _piAddress), + unsigned int *(int iRowsOut,int iColsOut,int* _piAddress), + unsigned short *(int iRowsOut,int iColsOut,int* _piAddress), + unsigned long *(int iRowsOut,int iColsOut,int* _piAddress), + long *(int iRowsOut,int iColsOut,int* _piAddress) { + int *temp; + temp=(int *)($result); + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; +} + +%typemap(out) double *(int iRowsOut,int iColsOut,int* _piAddress), + float *(int iRowsOut,int iColsOut,int* _piAddress) { + double *temp; + temp=(double *)($result); + iRowsOut=1; + iColsOut=1; + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; +} + %typemap(out) char *(int iRowsOut,int iColsOut,int* _piAddress){ iRowsOut=1; iColsOut=1; - createMatrixOfString(Rhs+1, iRowsOut, iColsOut, &$1, &_piAddress); - LhsVar(1)=Rhs+1; + createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result), &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; } +/* ------------------------------------------------------------ + * Enums mapped as integer values + * ------------------------------------------------------------ */ +%apply int { enum SWIGTYPE }; Added: branches/gsoc2009-sploving/Lib/scilab/typemaps.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/typemaps.i (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-06-20 02:44:06 UTC (rev 11288) @@ -0,0 +1,258 @@ +/* ----------------------------------------------------------------------------- + * See the LICENSE file for information on copyright, usage and redistribution + * of SWIG, and the README file for authors - http://www.swig.org/release.html. + * + * typemaps.i + * + * The SWIG typemap library provides a language independent mechanism for + * supporting output arguments, input values, and other C function + * calling mechanisms. The primary use of the library is to provide a + * better interface to certain C function--especially those involving + * pointers. + * ----------------------------------------------------------------------------- */ + +// INPUT typemaps. +// These remap a C pointer to be an "INPUT" value which is passed by value +// instead of reference. + + +/* +The following methods can be applied to turn a pointer into a simple +"input" value. That is, instead of passing a pointer to an object, +you would use a real value instead. + + int *INPUT + short *INPUT + long *INPUT + long long *INPUT + unsigned int *INPUT + unsigned short *INPUT + unsigned long *INPUT + unsigned long long *INPUT + unsigned char *INPUT + bool *INPUT + float *INPUT + double *INPUT + +To use these, suppose you had a C function like this : + + double fadd(double *a, double *b) { + return *a+*b; + } + +You could wrap it with SWIG as follows : + + %include typemaps.i + double fadd(double *INPUT, double *INPUT); + +or you can use the %apply directive : + + %include typemaps.i + %apply double *INPUT { double *a, double *b }; + double fadd(double *a, double *b); + +*/ + +%typemap(in) signed char *INPUT (int *piAddrVar, int iRows, int iCols, signed char temp), + unsigned char *INPUT (int *piAddrVar, int iRows, int iCols, unsigned char temp), + short *INPUT (int *piAddrVar, int iRows, int iCols, short temp), + unsigned short *INPUT (int *piAddrVar, int iRows, int iCols, unsigned short temp), + int *INPUT (int *piAddrVar, int iRows, int iCols, int temp), + unsigned int *INPUT (int *piAddrVar, int iRows, int iCols, unsigned int temp), + long *INPUT (int *piAddrVar, int iRows, int iCols, long temp), + unsigned long *INPUT (int *piAddrVar, int iRows, int iCols, unsigned long temp), + float *INPUT (int *piAddrVar, int iRows, int iCols, float temp), + double *INPUT (int *piAddrVar, int iRows, int iCols, double temp) { + double* _piData; + getVarAddressFromNumber($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + temp=($*1_ltype)*_piData; + $1=&temp; +} +#undef INPUT_TYPEMAP + +// OUTPUT typemaps. These typemaps are used for parameters that +// are output only. The output value is appended to the result as +// a list element. + +/* +The following methods can be applied to turn a pointer into an "output" +value. When calling a function, no input value would be given for +a parameter, but an output value would be returned. In the case of +multiple output values, functions will return a Perl array. + + int *OUTPUT + short *OUTPUT + long *OUTPUT + long long *OUTPUT + unsigned int *OUTPUT + unsigned short *OUTPUT + unsigned long *OUTPUT + unsigned long long *OUTPUT + unsigned char *OUTPUT + bool *OUTPUT + float *OUTPUT + double *OUTPUT + +For example, suppose you were trying to wrap the modf() function in the +C math library which splits x into integral and fractional parts (and +returns the integer part in one of its parameters).: + + double modf(double x, double *ip); + +You could wrap it with SWIG as follows : + + %include typemaps.i + double modf(double x, double *OUTPUT); + +or you can use the %apply directive : + + %include typemaps.i + %apply double *OUTPUT { double *ip }; + double modf(double x, double *ip); + +The Perl output of the function would be an array containing both +output values. + +*/ + +// Force the argument to be ignored. + +%typemap(in) signed char *OUTPUT (signed temp), + unsigned char *OUTPUT (unsigned temp), + short *OUTPUT (short temp), + unsigned short *OUTPUT (unsigned short temp), + int *OUTPUT (int temp), + unsigned int *OUTPUT (unsigned int temp), + long *OUTPUT (long temp), + unsigned long *OUTPUT (unsigned long temp), + float *OUTPUT (float temp), + double *OUTPUT (double temp) { + $1=($1_ltype)&temp; +} + +%typemap(argout) signed char *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress) { + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; +} + +%typemap(argout) short *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), + unsigned char *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress) { + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; +} + +%typemap(argout) int *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), + unsigned int *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), + unsigned short *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), + unsigned long *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), + long *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress) { + iRowsOut=1; + iColsOut=1; + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; +} + + +%typemap(argout) double *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), + float *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress) { + double temp; + temp=(double)(*$result); + iRowsOut=1; + iColsOut=1; + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; +} + + +// INOUT +// Mappings for an argument that is both an input and output +// parameter + +/* +The following methods can be applied to make a function parameter both +an input and output value. This combines the behavior of both the +"INPUT" and "OUTPUT" methods described earlier. Output values are +returned in the form of a Perl array. + + int *INOUT + short *INOUT + long *INOUT + long long *INOUT + unsigned int *INOUT + unsigned short *INOUT + unsigned long *INOUT + unsigned long long *INOUT + unsigned char *INOUT + bool *INOUT + float *INOUT + double *INOUT + +For example, suppose you were trying to wrap the following function : + + void neg(double *x) { + *x = -(*x); + } + +You could wrap it with SWIG as follows : + + %include typemaps.i + void neg(double *INOUT); + +or you can use the %apply directive : + + %include typemaps.i + %apply double *INOUT { double *x }; + void neg(double *x); + +Unlike C, this mapping does not directly modify the input value. +Rather, the modified input value shows up as the return value of the +function. Thus, to apply this function to a Perl variable you might +do this : + + $x = neg($x); + +*/ + +%typemap(in) int *INOUT = int *INPUT; +%typemap(in) short *INOUT = short *INPUT; +%typemap(in) long *INOUT = long *INPUT; +%typemap(in) unsigned *INOUT = unsigned *INPUT; +%typemap(in) unsigned short *INOUT = unsigned short *INPUT; +%typemap(in) unsigned long *INOUT = unsigned long *INPUT; +%typemap(in) unsigned char *INOUT = unsigned char *INPUT; +%typemap(in) signed char *INOUT = signed char *INPUT; +%typemap(in) float *INOUT = float *INPUT; +%typemap(in) double *INOUT = double *INPUT; + +%typemap(in) int *INOUT = int *OUTPUT; +%typemap(in) short *INOUT = short *OUTPUT; +%typemap(in) long *INOUT = long *INPUT; +%typemap(in) unsigned *INOUT = unsigned *OUTPUT; +%typemap(in) unsigned short *INOUT = unsigned short *OUTPUT; +%typemap(in) unsigned long *INOUT = unsigned long *OUTPUT; +%typemap(in) unsigned char *INOUT = unsigned char *OUTPUT; +%typemap(in) signed char *INOUT = signed char *OUTPUT; +%typemap(in) float *INOUT = float *OUTPUT; +%typemap(in) double *INOUT = double *OUTPUT; + + + + Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-20 00:32:49 UTC (rev 11287) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-20 02:44:06 UTC (rev 11288) @@ -17,19 +17,25 @@ class SCILAB:public Language { - private: + +private: File *f_begin; File *f_runtime; File *f_header; File *f_wrappers; File *f_init; - File *f_builder; + + String *f_builder_code; + String *f_example_code; - public: - SCILAB():f_begin(0), f_runtime(0), f_header(0),f_wrappers(0), - f_init(0) {} + bool hasfunction_flag; + bool hasconstant_flag; + +public: + SCILAB(): + f_builder_code(NewString("")), f_example_code(NewString("")), hasfunction_flag(false), hasconstant_flag(false) { + } - /* ------------------------------------------------------------ * main() * ------------------------------------------------------------ */ @@ -43,16 +49,16 @@ } } - //Set language-specific subdirectory in SWIG library + /* Set language-specific subdirectory in SWIG library */ SWIG_library_directory("scilab"); - // Add a symbol to the parser for conditional compilation + /* Add a symbol to the parser for conditional compilation */ Preprocessor_define("SWIGSCILAB 1", 0); - // Set scilab configuration file + /* Set scilab configuration file */ SWIG_config_file("scilab.swg"); - //Set typemap for scilab + /* Set typemap for scilab */ SWIG_typemap_lang("scilab"); } @@ -62,20 +68,14 @@ virtual int top(Node *n) { - Node *mod = Getattr(n, "module"); - - /*Get the name of the module*/ + /* Get the name of the module */ String *module = Getattr(n, "name"); - /*One output file for as the wrapper file*/ + /* One output file for as the wrapper file */ String *outfile = Getattr(n, "outfile"); f_begin = NewFile(outfile, "w", SWIG_output_files()); - /*Another output file to generate the .so or .dll */ - String *builder = NewStringf("%sbuilder.sce",SWIG_output_directory()); - f_builder=NewFile(builder,"w",SWIG_output_files()); - - /* Initialize all of the output files */ + /* Initialize the output files */ if (!f_begin) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); @@ -92,32 +92,52 @@ Swig_register_filebyname("wrapper", f_wrappers); Swig_register_filebyname("init", f_init); - /*Insert the banner at the beginning */ + /* Insert the banner at the beginning */ Swig_banner(f_begin); - /*Include some header file of scilab*/ + /* Include some header file of scilab */ Printf(f_runtime, "#include \"stack-c.h\"\n"); Printf(f_runtime, "#include \"sciprint.h\"\n"); Printf(f_runtime, "#include \"Scierror.h\"\n"); Printf(f_runtime, "#include \"variable_api.h\"\n"); Printf(f_runtime, "#include \"localization.h\"\n"); + /* Initialize the builder.sce file code */ + Printf(f_builder_code,"ilib_name = \"%slib\";\n",module); + Printf(f_builder_code,"files = [\"%s\",\"%s.o\"];\n", outfile,module); + Printf(f_builder_code,"libs = [];\n"); + Printf(f_builder_code, "table = ["); - /*Initialize the builder.sce file*/ - Printf(f_builder,"ilib_name = \"%slib\";\n",module); - Printf(f_builder,"files = [\"%s\",\"%s.o\"];\n", outfile,module); - Printf(f_builder,"libs = [];\n"); - Printf(f_builder, "table = ["); + /* Emit code for children */ + Language::top(n); + /* create the file to generate the module: "builder.sce" */ + if(hasfunction_flag) { + Printf(f_builder_code,"];\n"); + Printf(f_builder_code,"ilib_build(ilib_name,table,files,libs);"); + File *f_builder=NewFile(NewStringf("%sbuilder.sce",SWIG_output_directory()),"w",SWIG_output_files()); + Printv(f_builder,f_builder_code,NIL); + Close(f_builder); + Delete(f_builder); + Delete(f_builder_code); + } + else { + Delete(f_builder_code); + } - /*Emit code for children*/ - Language::top(n); + /* create the file for constants: "module.sce" */ + if(hasconstant_flag) { + File *f_example=NewFile(NewStringf("%s%s.sce",SWIG_output_directory(),module),"w",SWIG_output_files()); + Printv(f_example,f_example_code,NIL); + Close(f_example); + Delete(f_example); + Delete(f_example_code); + } + else { + Delete(f_example_code); + } - /*Finish off the builder.sce file*/ - Printf(f_builder,"];\n"); - Printf(f_builder,"ilib_build(ilib_name,table,files,libs);"); - - /*Dump out all the files*/ + /* Dump out all the files */ Dump(f_runtime, f_begin); Dump(f_header, f_begin); Dump(f_wrappers, f_begin); @@ -129,34 +149,32 @@ Delete(f_header); Delete(f_runtime); Close(f_begin); - Close(f_builder); Delete(f_begin); - Delete(f_builder); - + return SWIG_OK; } - /* ---------------------------------------------------------------------- + /* ---------------------------------------------------------------------- * functionWrapper() * ---------------------------------------------------------------------- */ virtual int functionWrapper(Node *n) { - // A new wrapper function object + hasfunction_flag=true; + + /* A new wrapper function object */ Wrapper *f = NewWrapper(); - Parm *p; String *tm; int j; - //Get the useful information from the node + /* Get the useful information from the node */ String *nodeType = Getattr(n, "nodeType"); int constructor = (!Cmp(nodeType, "constructor")); - int destructor = (!Cmp(nodeType, "destructor")); + // int destructor = (!Cmp(nodeType, "destructor")); String *storage = Getattr(n, "storage"); - bool overloaded = !!Getattr(n, "sym:overloaded"); - bool last_overload = overloaded && !Getattr(n, "sym:nextSibling"); + //bool last_overload = overloaded && !Getattr(n, "sym:nextSibling"); String *iname = Getattr(n, "sym:name"); String *wname = Swig_name_wrapper(iname); String *overname = Copy(wname); @@ -169,19 +187,19 @@ if (overloaded) Append(overname, Getattr(n, "sym:overname")); - Printv(f->def, "int ", overname, " (char *fname,unsigned long fname_len) {", NIL); + Printv(f->def, "int ", overname, " (char *fname,unsigned long fname_len) {\nint iOutNum=1;\nint iVarOut=Rhs+1;", NIL); - // Emit all of the local variables for holding arguments + /* Emit all of the local variables for holding arguments */ emit_parameter_variables(l, f); - //Attach typemaps to the parameter list + /* Attach typemaps to the parameter list */ emit_attach_parmmaps(l, f); Setattr(n, "wrap:parms", l); - // Get number of required and total arguments + /* Get number of required and total arguments */ int num_arguments = emit_num_arguments(l); int num_required = emit_num_required(l); - int varargs = emit_isvarargs(l); + //int varargs = emit_isvarargs(l); if (constructor && num_arguments == 1 && num_required == 1) { if (Cmp(storage, "explicit") == 0) { @@ -194,7 +212,7 @@ } } - //Walk the function parameter list and generate code to get arguments + /* Walk the function parameter list and generate code to get arguments */ for (j = 0, p = l; j < num_arguments; ++j) { while (checkAttribute(p, "tmap:in:numinputs", "0")) { p = Getattr(p, "tmap:in:next"); @@ -202,7 +220,7 @@ SwigType *pt = Getattr(p, "type"); - // Get typemap for this argument + /* Get typemap for this argument */ String *tm = Getattr(p, "tmap:in"); if (tm) { @@ -224,15 +242,15 @@ Setattr(n, "wrap:name", overname); - // Now write code to make the function call + /* Now write code to make the function call */ Swig_director_emit_dynamic_cast(n, f); String *actioncode = emit_action(n); - //Insert the return variable + /* Insert the return variable */ emit_return_variable(n, d, f); if ((tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode))) { - + Replaceall(tm, "$result", "result"); Printf(f->code, "%s\n", tm); } @@ -261,7 +279,7 @@ /* Dump the wrapper function */ Wrapper_print(f, f_wrappers); DelWrapper(f); - Printf(f_builder, "\"%s\",\"%s\";",iname,wname); + Printf(f_builder_code, "\"%s\",\"%s\";",iname,wname); Delete(overname); Delete(wname); @@ -275,14 +293,18 @@ * ----------------------------------------------------------------------- */ virtual int variableWrapper(Node *n) { - + + hasfunction_flag=true; + + /* Get the useful information from the node */ String *name = Getattr(n, "name"); String *iname = Getattr(n, "sym:name"); SwigType *t = Getattr(n, "type"); if (!addSymbol(iname, n)) return SWIG_ERROR; - + + /* two wrapper function to get and set the variable */ String *tm; Wrapper *getf = NewWrapper(); Wrapper *setf = NewWrapper(); @@ -290,106 +312,153 @@ String *getname = Swig_name_get(iname); String *setname = Swig_name_set(iname); - Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {", NIL); - + Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {\nint iOutNum=1;\nint iVarOut=Rhs+1;", NIL); + + /* add the local variable */ Wrapper_add_local(setf, "piAddrVar", "int *piAddrVar"); Wrapper_add_local(setf, "iRows", "int iRows"); Wrapper_add_local(setf, "iCols", "int iCols"); - + /* deal with the set function */ if (is_assignable(n)) { Setattr(n, "wrap:name", setname); if ((tm = Swig_typemap_lookup("in", n, name, 0))) { - Replaceall(tm, "$source", "args(0)"); - Replaceall(tm, "$target", name); - Replaceall(tm, "$input", "args(0)"); - Replaceall(tm, "$argnum", "1"); - //if (Getattr(n, "tmap:varin:implicitconv")) { - //Replaceall(tm, "$implicitconv", get_implicitconv_flag(n)); - //} + Replaceall(tm, "$argnum", "1"); emit_action_code(n, setf->code, tm); Delete(tm); } else { Swig_warning(WARN_TYPEMAP_VARIN_UNDEF, input_file, line_number, "Unable to set variable of type %s.\n", SwigType_str(t, 0)); } - - } else { - //Printf(setf->code, "return octave_set_immutable(args,nargout);"); + } + else { } Append(setf->code, "}\n"); Wrapper_print(setf, f_wrappers); - Printf(f_builder, "\"%s\",\"%s\";",setname,setname); - + Printf(f_builder_code, "\"%s\",\"%s\";",setname,setname); + + /* deal with the get function */ Setattr(n, "wrap:name", getname); int addfail = 0; - Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len){", NIL); + Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len){\nint iOutNum=1;\nint iVarOut=Rhs+1;", NIL); + /* add local variabe */ Wrapper_add_local(getf, "piAddrOut", "int* _piAddress"); Wrapper_add_local(getf, "iRows", "int iRowsOut"); Wrapper_add_local(getf, "iColsOut", "int iColsOut "); if ((tm = Swig_typemap_lookup("out", n, name, 0))) { - Replaceall(tm, "$source", name); - Replaceall(tm, "$target", "obj"); - Replaceall(tm, "$result", "obj"); + Replaceall(tm, "$result", name); addfail = emit_action_code(n, getf->code, tm); Delete(tm); } else { Swig_warning(WARN_TYPEMAP_VAROUT_UNDEF, input_file, line_number, "Unable to read variable of type %s\n", SwigType_str(t, 0)); } + /*Dump the wrapper function */ Append(getf->code, "}\n"); Wrapper_print(getf, f_wrappers); - Printf(f_builder, "\"%s\",\"%s\";",getname,getname); + Printf(f_builder_code, "\"%s\",\"%s\";",getname,getname); return SWIG_OK; + } - - } - - /* ----------------------------------------------------------------------- + /* ----------------------------------------------------------------------- * constantWrapper() * ----------------------------------------------------------------------- */ virtual int constantWrapper(Node *n) { - String *name = Getattr(n, "name"); + + /* set the flag so to generate the example.sce */ + hasconstant_flag=true; + + /* Get the useful information from the node */ String *iname = Getattr(n, "sym:name"); SwigType *type = Getattr(n, "type"); String *rawval = Getattr(n, "rawval"); String *value = rawval ? rawval : Getattr(n, "value"); - String *tm; + String *tempvalue=NewString(""); + + /* set the value format to be the scilab format */ + if(!Strcmp(type,"char")){ + value=Getattr(n,"rawvalue"); + char *temp=(Char(value)); + tempvalue=NewString("ascii"); + Printf(tempvalue,"(%i)",(int)*temp); + value=Copy(tempvalue); + } + else{ + if(!Strcmp(type,"p.char")){ + char *temp=(Char(value)); + int len=strlen(temp); + for(int i=0;i<len;++i){ + if(temp[i]=='\\'){ + temp[i]='"'; + ++i; + } + } + Printf(tempvalue,"%s",temp); + value=Copy(tempvalue); + } + } + + /* write into the code string */ + Printf(f_example_code, "example.%s = %s\n",iname,value); + + return SWIG_OK; + } + + /* --------------------------------------------------------------------- + * enumDeclaration() + * --------------------------------------------------------------------- */ + + virtual int enumDeclaration(Node *n) { + + /* set the flag so to generate the example.sce */ + hasconstant_flag=true; + return Language::enumDeclaration(n); + } - if (!addSymbol(iname, n)) - return SWIG_ERROR; - - Wrapper *getf = NewWrapper(); - String *getname = Swig_name_get(iname); + /* --------------------------------------------------------------------- + * enumvalueDeclaration() + * --------------------------------------------------------------------- */ + + virtual int enumvalueDeclaration(Node *n) { - Setattr(n, "wrap:name", getname); - Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len) {", NIL); + /* get the name of the enumvalue */ + String *iname = Getattr(n, "sym:name"); - Wrapper_add_local(getf, "piAddrOut", "int* _piAddress"); - Wrapper_add_local(getf, "iRows", "int iRowsOut"); - Wrapper_add_local(getf, "iColsOut", "int iColsOut "); + /* get the name of the enum name */ + String *parentName=Getattr(parentNode(n), "sym:name"); + + /* set the name to be the enum.enumvalue format */ + String *temp=Copy(parentName); + Printf(temp,".%s",iname); + Setattr(n,"sym:name",temp); - if ((tm = Swig_typemap_lookup("out", n, name, 0))) { - Replaceall(tm, "$source", name); - Replaceall(tm, "$target", "obj"); - Replaceall(tm, "$result", "obj"); - emit_action_code(n, getf->code, tm); - Delete(tm); - } else { - Swig_warning(WARN_TYPEMAP_VAROUT_UNDEF, input_file, line_number, "Unable to read variable of type %s\n", SwigType_str(type, 0)); + /* set the value attribute to be the integer */ + String *value; + String *enumvalue=Getattr(n,"enumvalue"); + if(enumvalue) { + Setattr(n,"value",enumvalue); } + else { + if(n!=firstChild(parentNode(n))) { + enumvalue=Getattr(n,"enumvalueex"); + value=Copy(parentName); + Printf(value,".%s",enumvalue); + Setattr(n,"value",value); + } + else { + Setattr(n,"value",Getattr(n,"enumvalueex")); + } + } + value=Getattr(n,"value"); - Append(getf->code, "}\n"); - Wrapper_print(getf, f_wrappers); - Printf(f_header, "const %s %s=%s;\n",SwigType_str(type,0),iname,value); - Printf(f_builder, "\"%s\",\"%s\";",iname,getname); - + /* write into the code string */ + Printf(f_example_code, "%s.%s=%s;\n",parentName,iname,value); + return SWIG_OK; - } - + } }; extern "C" Language *swig_scilab(void) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-06-21 01:26:50
|
Revision: 11292 http://swig.svn.sourceforge.net/swig/?rev=11292&view=rev Author: sploving Date: 2009-06-21 01:26:44 +0000 (Sun, 21 Jun 2009) Log Message: ----------- merge from trunk Modified Paths: -------------- branches/gsoc2009-sploving/CHANGES.current branches/gsoc2009-sploving/Doc/Manual/Arguments.html branches/gsoc2009-sploving/Doc/Manual/CSharp.html branches/gsoc2009-sploving/Doc/Manual/Contents.html branches/gsoc2009-sploving/Doc/Manual/Java.html branches/gsoc2009-sploving/Doc/Manual/Modules.html branches/gsoc2009-sploving/Doc/Manual/Ocaml.html branches/gsoc2009-sploving/Doc/Manual/Perl5.html branches/gsoc2009-sploving/Doc/Manual/Php.html branches/gsoc2009-sploving/Doc/Manual/Python.html branches/gsoc2009-sploving/Doc/Manual/Ruby.html branches/gsoc2009-sploving/Doc/Manual/SWIG.html branches/gsoc2009-sploving/Doc/Manual/Tcl.html branches/gsoc2009-sploving/Examples/python/callback/runme.py branches/gsoc2009-sploving/Examples/test-suite/common.mk branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_runme.cs branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_simple_runme.cs branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_typesafe_runme.cs branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_vector_runme.cs branches/gsoc2009-sploving/Examples/test-suite/enum_thorough.i branches/gsoc2009-sploving/Examples/test-suite/enum_thorough_typesafe.i branches/gsoc2009-sploving/Examples/test-suite/java/enum_thorough_proper_runme.java branches/gsoc2009-sploving/Examples/test-suite/java/enum_thorough_runme.java branches/gsoc2009-sploving/Examples/test-suite/java/enum_thorough_simple_runme.java branches/gsoc2009-sploving/Examples/test-suite/java/enum_thorough_typeunsafe_runme.java branches/gsoc2009-sploving/Examples/test-suite/li_std_map.i branches/gsoc2009-sploving/Examples/test-suite/octave/li_std_map_runme.m branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/perl5/enum_thorough_runme.pl branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/python/li_std_map_runme.py branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/ruby/li_std_map_runme.rb branches/gsoc2009-sploving/Examples/test-suite/typemap_subst.i branches/gsoc2009-sploving/Lib/csharp/csharp.swg branches/gsoc2009-sploving/Lib/csharp/csharphead.swg branches/gsoc2009-sploving/Lib/csharp/std_map.i branches/gsoc2009-sploving/Lib/csharp/std_vector.i branches/gsoc2009-sploving/Lib/intrusive_ptr.i branches/gsoc2009-sploving/Lib/java/javahead.swg branches/gsoc2009-sploving/Lib/perl5/reference.i branches/gsoc2009-sploving/Lib/python/pyrun.swg branches/gsoc2009-sploving/Source/Modules/allegrocl.cxx branches/gsoc2009-sploving/Source/Modules/csharp.cxx branches/gsoc2009-sploving/Source/Modules/java.cxx branches/gsoc2009-sploving/Source/Modules/ocaml.cxx branches/gsoc2009-sploving/Source/Modules/octave.cxx branches/gsoc2009-sploving/Source/Modules/python.cxx branches/gsoc2009-sploving/Source/Modules/ruby.cxx branches/gsoc2009-sploving/Source/Modules/typepass.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_map_runme.cs branches/gsoc2009-sploving/Examples/test-suite/li_std_multimap.i branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference.i branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference_runme.pl branches/gsoc2009-sploving/Examples/test-suite/ruby/li_std_multimap_runme.rb Property Changed: ---------------- branches/gsoc2009-sploving/ branches/gsoc2009-sploving/Examples/GIFPlot/Php/ branches/gsoc2009-sploving/Examples/php/class/runme.php branches/gsoc2009-sploving/Examples/php/constants/runme.php branches/gsoc2009-sploving/Examples/php/cpointer/runme.php branches/gsoc2009-sploving/Examples/php/disown/runme.php branches/gsoc2009-sploving/Examples/php/enum/runme.php branches/gsoc2009-sploving/Examples/php/funcptr/runme.php branches/gsoc2009-sploving/Examples/php/overloading/runme.php branches/gsoc2009-sploving/Examples/php/pointer/runme.php branches/gsoc2009-sploving/Examples/php/pragmas/runme.php branches/gsoc2009-sploving/Examples/php/proxy/runme.php branches/gsoc2009-sploving/Examples/php/reference/runme.php branches/gsoc2009-sploving/Examples/php/simple/runme.php branches/gsoc2009-sploving/Examples/php/sync/runme.php branches/gsoc2009-sploving/Examples/php/value/runme.php branches/gsoc2009-sploving/Examples/php/variables/runme.php branches/gsoc2009-sploving/Examples/test-suite/chicken/chicken_ext_test_runme.ss branches/gsoc2009-sploving/Examples/test-suite/chicken_ext_test.i branches/gsoc2009-sploving/Examples/test-suite/guilescm/guilescm_ext_test_runme.scm branches/gsoc2009-sploving/Examples/test-suite/guilescm_ext_test.i branches/gsoc2009-sploving/Examples/test-suite/implicittest.i branches/gsoc2009-sploving/Examples/test-suite/li_std_functors.i branches/gsoc2009-sploving/Examples/test-suite/li_std_list.i branches/gsoc2009-sploving/Examples/test-suite/li_std_pair_extra.i branches/gsoc2009-sploving/Examples/test-suite/li_std_pair_lang_object.i branches/gsoc2009-sploving/Examples/test-suite/li_std_queue.i branches/gsoc2009-sploving/Examples/test-suite/li_std_stack.i branches/gsoc2009-sploving/Examples/test-suite/li_std_string_extra.i branches/gsoc2009-sploving/Examples/test-suite/octave/li_std_pair_extra_runme.m branches/gsoc2009-sploving/Examples/test-suite/octave/li_std_string_extra_runme.m branches/gsoc2009-sploving/Examples/test-suite/octave/octave_cell_deref_runme.m branches/gsoc2009-sploving/Examples/test-suite/octave_cell_deref.i branches/gsoc2009-sploving/Examples/test-suite/php/abstract_inherit_ok_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/abstract_inherit_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/add_link_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/argout_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/arrayptr_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/arrays_global_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/arrays_global_twodim_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/arrays_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/arrays_scope_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/casts_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/class_ignore_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/conversion_namespace_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/conversion_ns_template_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/conversion_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/cpp_static_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/enum_scope_template_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/evil_diamond_ns_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/evil_diamond_prop_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/evil_diamond_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/extend_template_ns_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/extend_template_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/grouping_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/ignore_parameter_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/li_carrays_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/li_std_string_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/rename_scope_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/skel.php branches/gsoc2009-sploving/Examples/test-suite/php/smart_pointer_rename_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/sym_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/template_arg_typename_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/template_construct_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/tests.php branches/gsoc2009-sploving/Examples/test-suite/php/typedef_reference_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/typemap_ns_using_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/using1_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/using2_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/valuewrapper_base_runme.php branches/gsoc2009-sploving/Examples/test-suite/php_namewarn_rename.i branches/gsoc2009-sploving/Examples/test-suite/python/li_std_pair_extra_runme.py branches/gsoc2009-sploving/Examples/test-suite/python/li_std_string_extra_runme.py branches/gsoc2009-sploving/Examples/test-suite/r/r_copy_struct_runme.R branches/gsoc2009-sploving/Examples/test-suite/r/r_double_delete_runme.R branches/gsoc2009-sploving/Examples/test-suite/r/r_legacy_runme.R branches/gsoc2009-sploving/Examples/test-suite/r_copy_struct.i branches/gsoc2009-sploving/Examples/test-suite/r_double_delete.i branches/gsoc2009-sploving/Examples/test-suite/r_legacy.i branches/gsoc2009-sploving/Examples/test-suite/ruby/ruby_keywords_runme.rb branches/gsoc2009-sploving/Examples/test-suite/ruby/ruby_li_std_speed_runme.rb branches/gsoc2009-sploving/Examples/test-suite/ruby/ruby_naming_runme.rb branches/gsoc2009-sploving/Examples/test-suite/ruby/ruby_track_objects_directors_runme.rb branches/gsoc2009-sploving/Examples/test-suite/ruby/ruby_track_objects_runme.rb branches/gsoc2009-sploving/Examples/test-suite/ruby_keywords.i branches/gsoc2009-sploving/Examples/test-suite/ruby_li_std_speed.i branches/gsoc2009-sploving/Examples/test-suite/ruby_naming.i branches/gsoc2009-sploving/Examples/test-suite/ruby_track_objects.i branches/gsoc2009-sploving/Examples/test-suite/ruby_track_objects_directors.i branches/gsoc2009-sploving/Examples/test-suite/simple_array.i branches/gsoc2009-sploving/Examples/test-suite/stl_new.i branches/gsoc2009-sploving/Examples/test-suite/union_parameter.i Property changes on: branches/gsoc2009-sploving ___________________________________________________________________ Modified: svn:mergeinfo - /branches/swig-2.0:11085-11086,11088-11089 + /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11291 Modified: branches/gsoc2009-sploving/CHANGES.current =================================================================== --- branches/gsoc2009-sploving/CHANGES.current 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/CHANGES.current 2009-06-21 01:26:44 UTC (rev 11292) @@ -1,6 +1,43 @@ Version 1.3.40 (in progress) ============================ +2009-06-16: wsfulton + [Java,C#] Fix enum marshalling when %ignore is used on one of the enum items. + Incorrect enum values were being passed to the C++ layer or compilation errors resulted. + +2009-06-02: talby + [Perl] Resolved reference.i overload support problem + identfied by John Potowsky. + +2009-05-26: wsfulton + [C#] Improved std::map wrappers based on patch from Yuval Baror. The C# proxy + now implements System.Collections.Generic.IDictionary<>. + + These std:map wrappers have a non-backwards compatible overhaul to make them + like a .NET IDictionary. Some method names have changed as following: + set -> setitem (use this[] property now) + get -> getitem (use this[] property now) + has_key -> ContainsKey + del -> Remove + clear -> Clear + + The following macros used for std::map wrappers are deprecated and will no longer work: + specialize_std_map_on_key + specialize_std_map_on_value + specialize_std_map_on_both + + *** POTENTIAL INCOMPATIBILITY *** + +2009-05-14: bhy + [Python] Fix the wrong pointer value returned by SwigPyObject_repr(). + +2009-05-13: mutandiz (Mikel Bancroft) + [allegrocl] Minor tweak when wrapping in -nocwrap mode. + +2009-05-11: wsfulton + [C#] Improved std::vector wrappers on the C# proxy side from Yuval Baror. These + implement IList<> instead of IEnumerable<> where possible. + 2009-04-29: wsfulton [Java, C#] Add the 'notderived' attribute to the javabase and csbase typemaps. When this attribute is set, the typemap will not apply to classes that are derived Modified: branches/gsoc2009-sploving/Doc/Manual/Arguments.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Arguments.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Arguments.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -351,7 +351,7 @@ <div class="code"><pre> %module example -%include typemaps.i +%include "typemaps.i" ... %{ extern void negate(double *); Modified: branches/gsoc2009-sploving/Doc/Manual/CSharp.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/CSharp.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/CSharp.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -99,6 +99,7 @@ ... } </pre></div> +Note that by default, the generated C# classes have no namespace and the module name is unrelated to namespaces. The module name is just like in Java and is merely used to name some of the generated classes. </li> <li> @@ -131,7 +132,7 @@ C# doesn't support the notion of throws clauses. Therefore there is no 'throws' typemap attribute support for adding exception classes to a throws clause. Likewise there is no need for an equivalent to <tt>%javaexception</tt>. -In fact, throwing C# exceptions works quite differently, see <a href="CSharp.html#csharp_exceptions">C# Exceptions></a> below. +In fact, throwing C# exceptions works quite differently, see <a href="CSharp.html#csharp_exceptions">C# Exceptions</a> below. </li> <li> @@ -212,7 +213,7 @@ The 'cshin' attribute should contain the parameter type and name whenever a <a href="Java.html#java_constructor_helper_function">constructor helper function</a> is generated due to the 'pre' or 'post' attributes. The 'terminator' attribute normally just contains a closing brace for when the 'pre' attribute contains an opening brace, such as when a C# <tt>using</tt> or <tt>fixed</tt> block is started. Note that 'pre', 'post', 'terminator' and 'cshin' attributes are not used for marshalling the property set. -Please see the <a href="#csharp_date_marshalling">Date marshalling example</a> and <a href="#CSharp.html#csharp_date_properties">Date marshalling of properties example</a> for further understanding of these "csin" applicable attributes. +Please see the <a href="#csharp_date_marshalling">Date marshalling example</a> and <a href="#csharp_date_properties">Date marshalling of properties example</a> for further understanding of these "csin" applicable attributes. </p> </li> Modified: branches/gsoc2009-sploving/Doc/Manual/Contents.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Contents.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Contents.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -488,6 +488,7 @@ <!-- INDEX --> <div class="sectiontoc"> <ul> +<li><a href="Modules.html#Modules_introduction">Modules Introduction</a> <li><a href="Modules.html#Modules_nn1">Basics</a> <li><a href="Modules.html#Modules_nn2">The SWIG runtime code</a> <li><a href="Modules.html#external_run_time">External access to the runtime</a> Modified: branches/gsoc2009-sploving/Doc/Manual/Java.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Java.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Java.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -254,6 +254,12 @@ </p> <p> +The module name, specified with <tt>%module</tt>, determines the name of various generated classes as discussed <a href=#module_packages_classes>later</a>. +Note that the module name does not define a Java package and by default, the generated Java classes do not have a Java package. +The <tt>-package</tt> option described below can specify a Java package name to use. +</p> + +<p> The following sections have further practical examples and details on how you might go about compiling and using the generated files. </p> Modified: branches/gsoc2009-sploving/Doc/Manual/Modules.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Modules.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Modules.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -10,6 +10,7 @@ <!-- INDEX --> <div class="sectiontoc"> <ul> +<li><a href="#Modules_introduction">Modules Introduction</a> <li><a href="#Modules_nn1">Basics</a> <li><a href="#Modules_nn2">The SWIG runtime code</a> <li><a href="#external_run_time">External access to the runtime</a> @@ -22,11 +23,49 @@ +<H2><a name="Modules_introduction"></a>15.1 Modules Introduction</H2> + + <p> +Each invocation of SWIG requires a module name to be specified. +The module name is used to name the resulting target language extension module. +Exactly what this means and and what the name is used for +depends on the target language, for example the name can define +a target language namespace or merely be a useful name for naming files or helper classes. +Essentially, a module comprises target language wrappers for a chosen collection of global variables/functions, structs/classes and other C/C++ types. +</p> + +<p> +The module name can be supplied in one of two ways. +The first is to specify it with the special <tt>%module</tt> +directive. This directive must appear at the beginning of the interface file. +The general form of this directive is: +</p> + +<div class="code"><pre> +<tt>%module(option1="value1",option2="value2",...) modulename</tt> +</pre></div> + +<p> +where the modulename is mandatory and the options add one or more optional additional features. +Typically no options are specified, for example: +</p> + +<div class="code"><pre> +<tt>%module mymodule</tt> +</pre></div> + +<p> +The second way to specify the module name is with the <tt>-module</tt> command line option, for example <tt>-module mymodule</tt>. +If the module name is supplied on the command line, it overrides the name specified by the +<tt>%module</tt> directive. +</p> + +<p> When first working with SWIG, users commonly start by creating a single module. That is, you might define a single SWIG interface that wraps some set of C/C++ code. You then compile all of the generated -wrapper code into a module and use it. For large applications, however, +wrapper code together and use it. For large applications, however, this approach is problematic---the size of the generated wrapper code can be rather large. Moreover, it is probably easier to manage the target language interface when it is broken up into smaller pieces. @@ -34,10 +73,11 @@ <p> This chapter describes the problem of using SWIG in programs -where you want to create a collection of modules. +where you want to create a collection of modules. +Each module in the collection is created via separate invocations of SWIG. </p> -<H2><a name="Modules_nn1"></a>15.1 Basics</H2> +<H2><a name="Modules_nn1"></a>15.2 Basics</H2> <p> @@ -135,7 +175,7 @@ issue, read on. </p> -<H2><a name="Modules_nn2"></a>15.2 The SWIG runtime code</H2> +<H2><a name="Modules_nn2"></a>15.3 The SWIG runtime code</H2> <p> @@ -201,7 +241,7 @@ is empty. Only modules compiled with the same pair will share type information. </p> -<H2><a name="external_run_time"></a>15.3 External access to the runtime</H2> +<H2><a name="external_run_time"></a>15.4 External access to the runtime</H2> <p>As described in <a href="Typemaps.html#runtime_type_checker">The run-time type checker</a>, @@ -238,7 +278,7 @@ access. </p> -<H2><a name="Modules_nn4"></a>15.4 A word of caution about static libraries</H2> +<H2><a name="Modules_nn4"></a>15.5 A word of caution about static libraries</H2> <p> @@ -249,7 +289,7 @@ behavior. When working with dynamically loadable modules, you should try to work exclusively with shared libraries. </p> -<H2><a name="Modules_nn5"></a>15.5 References</H2> +<H2><a name="Modules_nn5"></a>15.6 References</H2> <p> @@ -257,7 +297,7 @@ an outside reference. John Levine's "Linkers and Loaders" is highly recommended. </p> -<H2><a name="Modules_nn6"></a>15.6 Reducing the wrapper file size</H2> +<H2><a name="Modules_nn6"></a>15.7 Reducing the wrapper file size</H2> <p> Modified: branches/gsoc2009-sploving/Doc/Manual/Ocaml.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Ocaml.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Ocaml.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -634,13 +634,13 @@ #include "example.h" %} -%include stl.i +%include <stl.i> namespace std { %template(StringVector) std::vector < string >; }; -%include example.h +%include "example.h" </pre></td></tr> <tr><td><font size="-1"><i>This example is in Examples/ocaml/stl </i></font></td></tr> Modified: branches/gsoc2009-sploving/Doc/Manual/Perl5.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Perl5.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Perl5.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -264,7 +264,7 @@ %} // Include code for rebuilding Perl -%include perlmain.i +%include <perlmain.i> </pre></div> <p> @@ -1543,7 +1543,7 @@ <div class="code"> <pre> %module example -%include typemaps.i +%include "typemaps.i" void add(int x, int y, int *REFERENCE); </pre> Modified: branches/gsoc2009-sploving/Doc/Manual/Php.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Php.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Php.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -479,7 +479,7 @@ <div class="code"><pre> %module example -%include cpointer.i +%include "cpointer.i" %pointer_functions(int,intp) void add( int *in1, int *in2, int *result); @@ -513,7 +513,7 @@ <div class="code"><pre> %module example -%include typemaps.i +%include "typemaps.i" void add( int *INPUT, int *INPUT, int *OUTPUT); @@ -545,7 +545,7 @@ <div class="code"><pre> %module example -%include phppointers.i +%include "phppointers.i" void add( int *REF, int *REF, int *REF); @@ -782,12 +782,6 @@ <p> -Note: Currently pragmas for PHP need to be specified using -<tt>%pragma(php)</tt> but also apply for PHP5! This is just a historical -oddity because SWIG's PHP support predates PHP5. -</p> - -<p> To place PHP code in the generated "example.php" file one can use the <b>code</b> pragma. The code is inserted after loading the shared object. Modified: branches/gsoc2009-sploving/Doc/Manual/Python.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Python.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Python.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -433,7 +433,7 @@ extern double My_variable; %} -%include embed.i // Include code for a static version of Python +%include "embed.i" // Include code for a static version of Python </pre></div> Modified: branches/gsoc2009-sploving/Doc/Manual/Ruby.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Ruby.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Ruby.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -2393,7 +2393,7 @@ -%include std_set.i<br> +%include <std_set.i><br> Modified: branches/gsoc2009-sploving/Doc/Manual/SWIG.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/SWIG.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/SWIG.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -174,13 +174,8 @@ ... </pre></div> <p> -The name of the module is supplied using the special <tt>%module</tt> -directive (or the <tt>-module</tt> command line option). This -directive must appear at the beginning of the file and is used to name -the resulting extension module (in addition, this name often defines -a namespace in the target language). If the module name is supplied on the -command line, it overrides the name specified with the -<tt>%module</tt> directive. +The module name is supplied using the special <tt>%module</tt> +directive. Modules are described further in the <a href="Modules.html#Modules_introduction">Modules Introduction</a> section. </p> <p> @@ -2361,7 +2356,7 @@ #include "vector.h" %} -%include vector.h // Just grab original C header file +%include "vector.h" // Just grab original C header file %extend Vector { // Attach these functions to struct Vector Vector(double x, double y, double z) { Vector *v; @@ -2883,10 +2878,16 @@ SWIG's <tt>%include</tt> directive to process an entire C source/header file. -<li>Make sure everything in the interface file uses ANSI C/C++syntax. +<li>Make sure everything in the interface file uses ANSI C/C++ syntax. <li>Make sure all necessary `<tt>typedef</tt>' declarations and -type-information is available in the interface file. +type-information is available in the interface file. +In particular, ensure that the type information is specified in the correct order as required by a C/C++ compiler. +Most importantly, define a type before it is used! A C compiler will tell you +if the full type information is not available if it is needed, whereas +SWIG will usually not warn or error out as it is designed to work without +full type information. However, if type information is not specified +correctly, the wrappers can be sub-optimal and even result in uncompileable C/C++ code. <li>If your program has a main() function, you may need to rename it (read on). @@ -2945,16 +2946,21 @@ <p> Of course, in this case, our header file is pretty simple so we could -have made an interface file like this as well:</p> +use a simpler approach and use an interface file like this:</p> <div class="code"><pre> /* File : interface.i */ %module mymodule -%include header.h +%{ +#include "header.h" +%} +%include "header.h" </pre></div> <p> -Naturally, your mileage may vary.</p> +The main advantage of this approach is minimal maintenance of an interface file for when the header file changes in the future. +In more complex projects, an interface file containing numerous <tt>%include</tt> and <tt>#include</tt> statements like this is one of the most common approaches to interface file design due to lower maintenance overhead. +</p> <H3><a name="SWIG_nn48"></a>5.7.3 Why use separate interface files?</H3> Modified: branches/gsoc2009-sploving/Doc/Manual/Tcl.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Tcl.html 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Doc/Manual/Tcl.html 2009-06-21 01:26:44 UTC (rev 11292) @@ -190,7 +190,7 @@ extern double My_variable; %} -%include tclsh.i // Include code for rebuilding tclsh +%include "tclsh.i" // Include code for rebuilding tclsh </pre></div> @@ -2822,7 +2822,7 @@ return i; } %} -%include tclsh.i +%include "tclsh.i" </pre></div> Property changes on: branches/gsoc2009-sploving/Examples/GIFPlot/Php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/GIFPlot/Php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/class/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/class/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/constants/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/constants/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/cpointer/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/cpointer/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/disown/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/disown/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/enum/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/enum/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/funcptr/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/funcptr/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/overloading/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/overloading/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/pointer/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/pointer/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/pragmas/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/pragmas/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/proxy/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/proxy/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/reference/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/reference/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/simple/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/simple/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/sync/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/sync/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/value/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/value/runme.php:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/php/variables/runme.php ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/php/variables/runme.php:11085-11086,11088-11089 Modified: branches/gsoc2009-sploving/Examples/python/callback/runme.py =================================================================== --- branches/gsoc2009-sploving/Examples/python/callback/runme.py 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Examples/python/callback/runme.py 2009-06-21 01:26:44 UTC (rev 11292) @@ -5,8 +5,6 @@ import example -# CEO class, which overrides Employee::getPosition(). - class PyCallback(example.Callback): def __init__(self): example.Callback.__init__(self) Property changes on: branches/gsoc2009-sploving/Examples/test-suite/chicken/chicken_ext_test_runme.ss ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/test-suite/chicken/chicken_ext_test_runme.ss:11085-11086,11088-11089 Property changes on: branches/gsoc2009-sploving/Examples/test-suite/chicken_ext_test.i ___________________________________________________________________ Deleted: svn:mergeinfo - /branches/swig-2.0/Examples/test-suite/chicken_ext_test.i:11085-11086,11088-11089 Modified: branches/gsoc2009-sploving/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/common.mk 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Examples/test-suite/common.mk 2009-06-21 01:26:44 UTC (rev 11292) @@ -64,7 +64,7 @@ LIBS = -L. LIBPREFIX = lib ACTION = check -INTERFACEDIR = ../ +INTERFACEDIR = $(if $(wildcard $*.i), ./, ../) # # Please keep test cases in alphabetical order. Modified: branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_runme.cs =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_runme.cs 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_runme.cs 2009-06-21 01:26:44 UTC (rev 11292) @@ -358,12 +358,51 @@ i.MemberInstance = Instances.memberinstance3; if (i.MemberInstance != Instances.memberinstance3) throw new Exception("MemberInstance 1 failed"); } + // ignore enum item tests start { + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_zero) != 0) throw new Exception("ignoreATest 0 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_three) != 3) throw new Exception("ignoreATest 3 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_ten) != 10) throw new Exception("ignoreATest 10 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_eleven) != 11) throw new Exception("ignoreATest 11 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_thirteen) != 13) throw new Exception("ignoreATest 13 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_fourteen) != 14) throw new Exception("ignoreATest 14 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_twenty) != 20) throw new Exception("ignoreATest 20 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_thirty) != 30) throw new Exception("ignoreATest 30 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_thirty_two) != 32) throw new Exception("ignoreATest 32 failed"); + if ((int)enum_thorough.ignoreATest(IgnoreTest.IgnoreA.ignoreA_thirty_three) != 33) throw new Exception("ignoreATest 33 failed"); + } + { + if ((int)enum_thorough.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_eleven) != 11) throw new Exception("ignoreBTest 11 failed"); + if ((int)enum_thorough.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_twelve) != 12) throw new Exception("ignoreBTest 12 failed"); + if ((int)enum_thorough.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_thirty_one) != 31) throw new Exception("ignoreBTest 31 failed"); + if ((int)enum_thorough.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_thirty_two) != 32) throw new Exception("ignoreBTest 32 failed"); + if ((int)enum_thorough.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_forty_one) != 41) throw new Exception("ignoreBTest 41 failed"); + if ((int)enum_thorough.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_forty_two) != 42) throw new Exception("ignoreBTest 42 failed"); + } + { + if ((int)enum_thorough.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_ten) != 10) throw new Exception("ignoreCTest 10 failed"); + if ((int)enum_thorough.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_twelve) != 12) throw new Exception("ignoreCTest 12 failed"); + if ((int)enum_thorough.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_thirty) != 30) throw new Exception("ignoreCTest 30 failed"); + if ((int)enum_thorough.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_thirty_two) != 32) throw new Exception("ignoreCTest 32 failed"); + if ((int)enum_thorough.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_forty) != 40) throw new Exception("ignoreCTest 40 failed"); + if ((int)enum_thorough.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_forty_two) != 42) throw new Exception("ignoreCTest 42 failed"); + } + { + if ((int)enum_thorough.ignoreDTest(IgnoreTest.IgnoreD.ignoreD_twenty_one) != 21) throw new Exception("ignoreDTest 21 failed"); + if ((int)enum_thorough.ignoreDTest(IgnoreTest.IgnoreD.ignoreD_twenty_two) != 22) throw new Exception("ignoreDTest 22 failed"); + } + { + if ((int)enum_thorough.ignoreETest(IgnoreTest.IgnoreE.ignoreE_zero) != 0) throw new Exception("ignoreETest 0 failed"); + if ((int)enum_thorough.ignoreETest(IgnoreTest.IgnoreE.ignoreE_twenty_one) != 21) throw new Exception("ignoreETest 21 failed"); + if ((int)enum_thorough.ignoreETest(IgnoreTest.IgnoreE.ignoreE_twenty_two) != 22) throw new Exception("ignoreETest 22 failed"); + } + // ignore enum item tests end + { if ((int)enum_thorough.repeatTest(repeat.one) != 1) throw new Exception("repeatTest 1 failed"); if ((int)enum_thorough.repeatTest(repeat.initial) != 1) throw new Exception("repeatTest 2 failed"); if ((int)enum_thorough.repeatTest(repeat.two) != 2) throw new Exception("repeatTest 3 failed"); if ((int)enum_thorough.repeatTest(repeat.three) != 3) throw new Exception("repeatTest 4 failed"); - if ((int)enum_thorough.repeatTest(repeat.last) != 3) throw new Exception("repeatTest 5 failed"); + if ((int)enum_thorough.repeatTest(repeat.llast) != 3) throw new Exception("repeatTest 5 failed"); if ((int)enum_thorough.repeatTest(repeat.end) != 3) throw new Exception("repeatTest 6 failed"); } } Modified: branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_simple_runme.cs =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_simple_runme.cs 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_simple_runme.cs 2009-06-21 01:26:44 UTC (rev 11292) @@ -358,12 +358,51 @@ i.MemberInstance = Instances.memberinstance3; if (i.MemberInstance != Instances.memberinstance3) throw new Exception("MemberInstance 1 failed"); } + // ignore enum item tests start { + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_zero) != 0) throw new Exception("ignoreATest 0 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_three) != 3) throw new Exception("ignoreATest 3 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_ten) != 10) throw new Exception("ignoreATest 10 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_eleven) != 11) throw new Exception("ignoreATest 11 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_thirteen) != 13) throw new Exception("ignoreATest 13 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_fourteen) != 14) throw new Exception("ignoreATest 14 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_twenty) != 20) throw new Exception("ignoreATest 20 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_thirty) != 30) throw new Exception("ignoreATest 30 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_thirty_two) != 32) throw new Exception("ignoreATest 32 failed"); + if (enum_thorough_simple.ignoreATest(IgnoreTest.ignoreA_thirty_three) != 33) throw new Exception("ignoreATest 33 failed"); + } + { + if (enum_thorough_simple.ignoreBTest(IgnoreTest.ignoreB_eleven) != 11) throw new Exception("ignoreBTest 11 failed"); + if (enum_thorough_simple.ignoreBTest(IgnoreTest.ignoreB_twelve) != 12) throw new Exception("ignoreBTest 12 failed"); + if (enum_thorough_simple.ignoreBTest(IgnoreTest.ignoreB_thirty_one) != 31) throw new Exception("ignoreBTest 31 failed"); + if (enum_thorough_simple.ignoreBTest(IgnoreTest.ignoreB_thirty_two) != 32) throw new Exception("ignoreBTest 32 failed"); + if (enum_thorough_simple.ignoreBTest(IgnoreTest.ignoreB_forty_one) != 41) throw new Exception("ignoreBTest 41 failed"); + if (enum_thorough_simple.ignoreBTest(IgnoreTest.ignoreB_forty_two) != 42) throw new Exception("ignoreBTest 42 failed"); + } + { + if (enum_thorough_simple.ignoreCTest(IgnoreTest.ignoreC_ten) != 10) throw new Exception("ignoreCTest 10 failed"); + if (enum_thorough_simple.ignoreCTest(IgnoreTest.ignoreC_twelve) != 12) throw new Exception("ignoreCTest 12 failed"); + if (enum_thorough_simple.ignoreCTest(IgnoreTest.ignoreC_thirty) != 30) throw new Exception("ignoreCTest 30 failed"); + if (enum_thorough_simple.ignoreCTest(IgnoreTest.ignoreC_thirty_two) != 32) throw new Exception("ignoreCTest 32 failed"); + if (enum_thorough_simple.ignoreCTest(IgnoreTest.ignoreC_forty) != 40) throw new Exception("ignoreCTest 40 failed"); + if (enum_thorough_simple.ignoreCTest(IgnoreTest.ignoreC_forty_two) != 42) throw new Exception("ignoreCTest 42 failed"); + } + { + if (enum_thorough_simple.ignoreDTest(IgnoreTest.ignoreD_twenty_one) != 21) throw new Exception("ignoreDTest 21 failed"); + if (enum_thorough_simple.ignoreDTest(IgnoreTest.ignoreD_twenty_two) != 22) throw new Exception("ignoreDTest 22 failed"); + } + { + if (enum_thorough_simple.ignoreETest(IgnoreTest.ignoreE_zero) != 0) throw new Exception("ignoreETest 0 failed"); + if (enum_thorough_simple.ignoreETest(IgnoreTest.ignoreE_twenty_one) != 21) throw new Exception("ignoreETest 21 failed"); + if (enum_thorough_simple.ignoreETest(IgnoreTest.ignoreE_twenty_two) != 22) throw new Exception("ignoreETest 22 failed"); + } + // ignore enum item tests end + { if (enum_thorough_simple.repeatTest(enum_thorough_simple.one) != 1) throw new Exception("repeatTest 1 failed"); if (enum_thorough_simple.repeatTest(enum_thorough_simple.initial) != 1) throw new Exception("repeatTest 2 failed"); if (enum_thorough_simple.repeatTest(enum_thorough_simple.two) != 2) throw new Exception("repeatTest 3 failed"); if (enum_thorough_simple.repeatTest(enum_thorough_simple.three) != 3) throw new Exception("repeatTest 4 failed"); - if (enum_thorough_simple.repeatTest(enum_thorough_simple.last) != 3) throw new Exception("repeatTest 5 failed"); + if (enum_thorough_simple.repeatTest(enum_thorough_simple.llast) != 3) throw new Exception("repeatTest 5 failed"); if (enum_thorough_simple.repeatTest(enum_thorough_simple.end) != 3) throw new Exception("repeatTest 6 failed"); } } Modified: branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_typesafe_runme.cs =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_typesafe_runme.cs 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/enum_thorough_typesafe_runme.cs 2009-06-21 01:26:44 UTC (rev 11292) @@ -358,12 +358,51 @@ i.MemberInstance = Instances.memberinstance3; if (i.MemberInstance != Instances.memberinstance3) throw new Exception("MemberInstance 1 failed"); } + // ignore enum item tests start { + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_zero).swigValue != 0) throw new Exception("ignoreATest 0 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_three).swigValue != 3) throw new Exception("ignoreATest 3 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_ten).swigValue != 10) throw new Exception("ignoreATest 10 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_eleven).swigValue != 11) throw new Exception("ignoreATest 11 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_thirteen).swigValue != 13) throw new Exception("ignoreATest 13 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_fourteen).swigValue != 14) throw new Exception("ignoreATest 14 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_twenty).swigValue != 20) throw new Exception("ignoreATest 20 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_thirty).swigValue != 30) throw new Exception("ignoreATest 30 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_thirty_two).swigValue != 32) throw new Exception("ignoreATest 32 failed"); + if (enum_thorough_typesafe.ignoreATest(IgnoreTest.IgnoreA.ignoreA_thirty_three).swigValue != 33) throw new Exception("ignoreATest 33 failed"); + } + { + if (enum_thorough_typesafe.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_eleven).swigValue != 11) throw new Exception("ignoreBTest 11 failed"); + if (enum_thorough_typesafe.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_twelve).swigValue != 12) throw new Exception("ignoreBTest 12 failed"); + if (enum_thorough_typesafe.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_thirty_one).swigValue != 31) throw new Exception("ignoreBTest 31 failed"); + if (enum_thorough_typesafe.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_thirty_two).swigValue != 32) throw new Exception("ignoreBTest 32 failed"); + if (enum_thorough_typesafe.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_forty_one).swigValue != 41) throw new Exception("ignoreBTest 41 failed"); + if (enum_thorough_typesafe.ignoreBTest(IgnoreTest.IgnoreB.ignoreB_forty_two).swigValue != 42) throw new Exception("ignoreBTest 42 failed"); + } + { + if (enum_thorough_typesafe.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_ten).swigValue != 10) throw new Exception("ignoreCTest 10 failed"); + if (enum_thorough_typesafe.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_twelve).swigValue != 12) throw new Exception("ignoreCTest 12 failed"); + if (enum_thorough_typesafe.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_thirty).swigValue != 30) throw new Exception("ignoreCTest 30 failed"); + if (enum_thorough_typesafe.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_thirty_two).swigValue != 32) throw new Exception("ignoreCTest 32 failed"); + if (enum_thorough_typesafe.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_forty).swigValue != 40) throw new Exception("ignoreCTest 40 failed"); + if (enum_thorough_typesafe.ignoreCTest(IgnoreTest.IgnoreC.ignoreC_forty_two).swigValue != 42) throw new Exception("ignoreCTest 42 failed"); + } + { + if (enum_thorough_typesafe.ignoreDTest(IgnoreTest.IgnoreD.ignoreD_twenty_one).swigValue != 21) throw new Exception("ignoreDTest 21 failed"); + if (enum_thorough_typesafe.ignoreDTest(IgnoreTest.IgnoreD.ignoreD_twenty_two).swigValue != 22) throw new Exception("ignoreDTest 22 failed"); + } + { + if (enum_thorough_typesafe.ignoreETest(IgnoreTest.IgnoreE.ignoreE_zero).swigValue != 0) throw new Exception("ignoreETest 0 failed"); + if (enum_thorough_typesafe.ignoreETest(IgnoreTest.IgnoreE.ignoreE_twenty_one).swigValue != 21) throw new Exception("ignoreETest 21 failed"); + if (enum_thorough_typesafe.ignoreETest(IgnoreTest.IgnoreE.ignoreE_twenty_two).swigValue != 22) throw new Exception("ignoreETest 22 failed"); + } + // ignore enum item tests end + { if (enum_thorough_typesafe.repeatTest(repeat.one).swigValue != 1) throw new Exception("repeatTest 1 failed"); if (enum_thorough_typesafe.repeatTest(repeat.initial).swigValue != 1) throw new Exception("repeatTest 2 failed"); if (enum_thorough_typesafe.repeatTest(repeat.two).swigValue != 2) throw new Exception("repeatTest 3 failed"); if (enum_thorough_typesafe.repeatTest(repeat.three).swigValue != 3) throw new Exception("repeatTest 4 failed"); - if (enum_thorough_typesafe.repeatTest(repeat.last).swigValue != 3) throw new Exception("repeatTest 5 failed"); + if (enum_thorough_typesafe.repeatTest(repeat.llast).swigValue != 3) throw new Exception("repeatTest 5 failed"); if (enum_thorough_typesafe.repeatTest(repeat.end).swigValue != 3) throw new Exception("repeatTest 6 failed"); } } Copied: branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_map_runme.cs (from rev 11287, trunk/Examples/test-suite/csharp/li_std_map_runme.cs) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_map_runme.cs (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_map_runme.cs 2009-06-21 01:26:44 UTC (rev 11292) @@ -0,0 +1,243 @@ +/* ----------------------------------------------------------------------------- + * See the LICENSE file for information on copyright, usage and redistribution + * of SWIG, and the README file for authors - http://www.swig.org/release.html. + * + * li_std_map_runme.cs + * + * SWIG C# tester for std_map.i + * Implementation by Yuval Baror (http://yuval.bar-or.org) + * + * This class tests all the functionality of the std_map.i wrapper. + * Upon successful testing, the main function doesn't print out anything. + * If any error is found - it will be printed on the screen. + * ----------------------------------------------------------------------------- */ + +using System; +using System.Collections.Generic; +using li_std_mapNamespace; + +public class li_std_map_runme { + + private static readonly int collectionSize = 20; + private static readonly int midCollection = collectionSize / 2; + + public static void Main() + { + // Set up an int int map + StringIntMap simap = new StringIntMap(); + for (int i = 0; i < collectionSize; i++) + { + int val = i * 18; + simap.Add(i.ToString(), val); + } + + // Count property test + if (simap.Count != collectionSize) + throw new Exception("Count test failed"); + + // IsReadOnly property test + if (simap.IsReadOnly) + throw new Exception("IsReadOnly test failed"); + + // Item indexing test + simap["0"] = 200; + if (simap["0"] != 200) + throw new Exception("Item property test failed"); + simap["0"] = 0 * 18; + + // ContainsKey() test + for (int i = 0; i < collectionSize; i++) + { + if (!simap.ContainsKey(i.ToString())) + throw new Exception("ContainsKey test " + i + " failed"); + } + + // ContainsKey() test + for (int i = 0; i < collectionSize; i++) + { + if (!simap.Contains(new KeyValuePair<string, int>(i.ToString(), i * 18))) + throw new Exception("Contains test " + i + " failed"); + } + + // TryGetValue() test + int value; + bool rc = simap.TryGetValue("3", out value); + if (rc != true || value != (3 * 18)) + throw new Exception("TryGetValue test 1 failed"); + + rc = simap.TryGetValue("-1", out value); + if (rc != false) + throw new Exception("TryGetValue test 2 failed"); + + // Keys and Values test + { + IList<string> keys = new List<string>(simap.Keys); + IList<int> values = new List<int>(simap.Values); + if (keys.Count != collectionSize) + throw new Exception("Keys count test failed"); + + if (values.Count != collectionSize) + throw new Exception("Values count test failed"); + + for (int i = 0; i < keys.Count; i++) + { + if (simap[keys[i]] != values[i]) + throw new Exception("Keys and values test failed for index " + i); + } + } + + // Add and Remove test + for (int i = 100; i < 103; i++) + { + simap.Add(i.ToString(), i * 18); + if (!simap.ContainsKey(i.ToString()) || simap[i.ToString()] != (i * 18)) + throw new Exception("Add test failed for index " + i); + + simap.Remove(i.ToString()); + if (simap.ContainsKey(i.ToString())) + throw new Exception("Remove test failed for index " + i); + } + + for (int i = 200; i < 203; i++) + { + simap.Add(new KeyValuePair<string, int>(i.ToString(), i * 18)); + if (!simap.ContainsKey(i.ToString()) || simap[i.ToString()] != (i * 18)) + throw new Exception("Add explicit test failed for index " + i); + + simap.Remove(new KeyValuePair<string, int>(i.ToString(), i * 18)); + if (simap.ContainsKey(i.ToString())) + throw new Exception("Remove explicit test failed for index " + i); + } + + // Duplicate key test + try + { + simap.Add("3", 0); + throw new Exception("Adding duplicate key test failed"); + } + catch (ArgumentException) + { + } + + // CopyTo() test + { + KeyValuePair<string, int>[] outputarray = new KeyValuePair<string, int>[collectionSize]; + simap.CopyTo(outputarray); + foreach (KeyValuePair<string, int> val in outputarray) + { + if (simap[val.Key] != val.Value) + throw new Exception("CopyTo (1) test failed, index:" + val.Key); + } + } + { + KeyValuePair<string, int>[] outputarray = new KeyValuePair<string, int>[midCollection + collectionSize]; + simap.CopyTo(outputarray, midCollection); + for (int i = midCollection; i < midCollection + collectionSize; i++) + { + KeyValuePair<string, int> val = outputarray[i]; + if (simap[val.Key] != val.Value) + throw new Exception("CopyTo (2) test failed, index:" + val.Key); + } + } + { + KeyValuePair<string, int>[] outputarray = new KeyValuePair<string, int>[collectionSize - 1]; + try + { + simap.CopyTo(outputarray); + throw new Exception("CopyTo (4) test failed"); + } + catch (ArgumentException) + { + } + } + + // Clear test + simap.Clear(); + if (simap.Count != 0) + throw new Exception("Clear test failed"); + + // Test wrapped methods + for (int i = 1; i <= 5; i++) + { + simap[i.ToString()] = i; + } + double avg = li_std_map.valueAverage(simap); + if (avg != 3.0) + throw new Exception("Wrapped method valueAverage test failed. Got " + avg); + + string keyStringified = li_std_map.stringifyKeys(simap); + if (keyStringified != " 1 2 3 4 5") + throw new Exception("Wrapped method stringifyKeys test failed. Got " + keyStringified); + + // Test a map with a new specialized type (Struct) + { + IntStructMap ismap = new IntStructMap(); + for (int i = 0; i < 10; i++) + { + ismap.Add(i, new Struct(i * 10.1)); + } + + if (ismap.Count != 10) + throw new Exception("Count test on specialized map failed"); + + foreach (KeyValuePair<int, Struct> p in ismap) + { + if ((p.Key * 10.1) != p.Value.num) + throw new Exception("Iteration test on specialized map failed for index " + p.Key); + } + } + + // Test a map of pointers + { + IntStructPtrMap ispmap = new IntStructPtrMap(); + for (int i = 0; i < 10; i++) + { + ispmap.Add(i, new Struct(i * 10.1)); + } + + if (ispmap.Count != 10) + throw new Exception("Count test on specialized pointer map failed"); + + foreach (KeyValuePair<int, Struct> p in ispmap) + { + if ((p.Key * 10.1) != p.Value.num) + throw new Exception("Iteration test on specialized pointer map failed for index " + p.Key); + } + } + { + IntStructConstPtrMap iscpmap = new IntStructConstPtrMap(); + for (int i = 0; i < 10; i++) + { + iscpmap.Add(i, new Struct(i * 10.1)); + } + + if (iscpmap.Count != 10) + throw new Exception("Count test on specialized const pointer map failed"); + + foreach (KeyValuePair<int, Struct> p in iscpmap) + { + if ((p.Key * 10.1) != p.Value.num) + throw new Exception("Iteration test on specialized const pointer map failed for index " + p.Key); + } + } + + // Test non-specialized map + { + StructIntMap limap = new StructIntMap(); + Struct s7 = new Struct(7); + Struct s8 = new Struct(8); + limap.setitem(s7 , 8); + if (limap.getitem(s7) != 8) + throw new Exception("Assignment test on non-specialized map failed"); + + if (!limap.ContainsKey(s7)) + throw new Exception("Key test (1) on non-specialized map failed"); + + if (limap.ContainsKey(s8)) + throw new Exception("Key test (2) on non-specialized map failed"); + } + + // All done + } +} + Modified: branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_vector_runme.cs =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_vector_runme.cs 2009-06-20 12:38:09 UTC (rev 11291) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_vector_runme.cs 2009-06-21 01:26:44 UTC (rev 11292) @@ -153,7 +153,7 @@ } } try { - new DoubleVector(null); + new DoubleVector((System.Collections.ICollection)null); throw new Exception("ICollection constructor null test failed"); } catch (ArgumentNullException) { } @@ -180,6 +180,13 @@ throw new Exception("LastIndexOf non-existent test failed"); if (dv.LastIndexOf(33.3) != 6) throw new Exception("LastIndexOf position test failed"); + + // Copy constructor test + DoubleVector dvCopy = new Do... [truncated message content] |
From: <spl...@us...> - 2009-06-25 03:14:45
|
Revision: 11315 http://swig.svn.sourceforge.net/swig/?rev=11315&view=rev Author: sploving Date: 2009-06-25 03:14:26 +0000 (Thu, 25 Jun 2009) Log Message: ----------- Some change:getVarAddressFromPosition,createMatrixOfDouble,createMatrixOfString and add argument number checking Modified Paths: -------------- branches/gsoc2009-sploving/Examples/Makefile.in branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Lib/scilab/typemaps.i branches/gsoc2009-sploving/Makefile.in branches/gsoc2009-sploving/Source/Modules/scilab.cxx Modified: branches/gsoc2009-sploving/Examples/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/Makefile.in 2009-06-24 18:10:10 UTC (rev 11314) +++ branches/gsoc2009-sploving/Examples/Makefile.in 2009-06-25 03:14:26 UTC (rev 11315) @@ -1139,7 +1139,7 @@ ##### SCILAB ###### ################################################################## -# Make sure these locate your Octave installation +# Make sure these locate your Scilab installation SCILAB_INCLUDE= $(DEFS) @SCILABINCLUDE@ SCILAB_LIB = @SCILABLIB@ SCILAB = @SCILAB@ @@ -1158,5 +1158,5 @@ # ----------------------------------------------------------------- scilab_clean: - rm -f *_wrap* + rm -f *.sce *.so lib*lib.c Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-24 18:10:10 UTC (rev 11314) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-25 03:14:26 UTC (rev 11315) @@ -27,7 +27,7 @@ float (int *piAddrVar, int iRows, int iCols), double (int *piAddrVar, int iRows, int iCols) { double* _piData; - getVarAddressFromNumber($argnum, &piAddrVar); + getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { @@ -40,7 +40,7 @@ %typemap(in) char (int *piAddrVar, int iRows, int iCols) { char* _pstStrings; int _piLength; - getVarAddressFromNumber($argnum, &piAddrVar); + getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { @@ -51,18 +51,82 @@ } /* Pointers */ -%typemap(in) signed char *(int *piAddrVar, int iRows, int iCols, signed char temp), - unsigned char *(int *piAddrVar, int iRows, int iCols, unsigned char temp), - short *(int *piAddrVar, int iRows, int iCols, short temp), - unsigned short *(int *piAddrVar, int iRows, int iCols, unsigned short temp), - int *(int *piAddrVar, int iRows, int iCols, int temp), - unsigned int *(int *piAddrVar, int iRows, int iCols, unsigned int temp), - long *(int *piAddrVar, int iRows, int iCols, long temp), - unsigned long *(int *piAddrVar, int iRows, int iCols, unsigned long temp), - float *(int *piAddrVar, int iRows, int iCols, float temp), - double *(int *piAddrVar, int iRows, int iCols, double temp) { +%typemap(in) signed char *(int *piAddrVar, int iRows, int iCols) { + char* _piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + } +} + +%typemap(in) short *(int *piAddrVar, int iRows, int iCols), + unsigned char *(int *piAddrVar, int iRows, int iCols), + short [](int *piAddrVar, int iRows, int iCols), + unsigned char [](int *piAddrVar, int iRows, int iCols) { + short* _piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + } +} + +%typemap(in) unsigned short *(int *piAddrVar, int iRows, int iCols), + int *(int *piAddrVar, int iRows, int iCols), + unsigned int *(int *piAddrVar, int iRows, int iCols), + long *(int *piAddrVar, int iRows, int iCols), + unsigned long *(int *piAddrVar, int iRows, int iCols), + unsigned short [](int *piAddrVar, int iRows, int iCols), + int [](int *piAddrVar, int iRows, int iCols), + unsigned int [](int *piAddrVar, int iRows, int iCols), + long [](int *piAddrVar, int iRows, int iCols), + unsigned long [](int *piAddrVar, int iRows, int iCols) { + int* _piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + } +} + +%typemap(in) double *(int *piAddrVar, int iRows, int iCols), + float *(int *piAddrVar, int iRows, int iCols), + double [](int *piAddrVar, int iRows, int iCols), + float [](int *piAddrVar, int iRows, int iCols){ double* _piData; - getVarAddressFromNumber($argnum, &piAddrVar); + int index; + getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { @@ -73,15 +137,16 @@ free($1); } $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - memcpy($1,_piData,iRows*iCols*sizeof($*1_ltype)); - //temp=($*1_ltype)*_piData; - //$1=&temp; + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + } } -%typemap(in) char *(int *piAddrVar, int iRows, int iCols) { +%typemap(in) char *(int *piAddrVar, int iRows, int iCols), + char [](int *piAddrVar, int iRows, int iCols){ char* _pstStrings; int _piLength; - getVarAddressFromNumber($argnum, &piAddrVar); + getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { @@ -91,6 +156,113 @@ $1=strdup(_pstStrings); } +/* Arrays */ +%typemap(in) signed char [ANY][ANY](int *piAddrVar, int iRows, int iCols) { + char* _piData; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc($1_dim0*$1_dim1*sizeof($1_basetype)); + size_t jj; + for(jj=0;jj<$1_dim1;jj++){ + size_t ii; + for(ii=0;ii<$1_dim0;ii++) + $1[ii][jj]=($1_basetype)_piData[jj*$1_dim0+ii]; + } +} + +%typemap(in) short [ANY][ANY](int *piAddrVar, int iRows, int iCols), + unsigned char [ANY][ANY](int *piAddrVar, int iRows, int iCols) { + short* _piData; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc($1_dim0*$1_dim1*sizeof($1_basetype)); + size_t jj; + for(jj=0;jj<$1_dim1;jj++){ + size_t ii; + for(ii=0;ii<$1_dim0;ii++) + $1[ii][jj]=($1_basetype)_piData[jj*$1_dim0+ii]; + } +} + +%typemap(in) unsigned short [ANY][ANY](int *piAddrVar, int iRows, int iCols), + int [ANY][ANY](int *piAddrVar, int iRows, int iCols), + unsigned int [ANY][ANY](int *piAddrVar, int iRows, int iCols), + long [ANY][ANY](int *piAddrVar, int iRows, int iCols), + unsigned long [ANY][ANY](int *piAddrVar, int iRows, int iCols){ + int* _piData; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc($1_dim0*$1_dim1*sizeof($1_basetype)); + size_t jj; + for(jj=0;jj<$1_dim1;jj++){ + size_t ii; + for(ii=0;ii<$1_dim0;ii++) + $1[ii][jj]=($1_basetype)_piData[jj*$1_dim0+ii]; + } +} + + +%typemap(in) double [ANY][ANY](int *piAddrVar, int iRows, int iCols), + float [ANY][ANY](int *piAddrVar, int iRows, int iCols) { + double* _piData; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc($1_dim0*$1_dim1*sizeof($1_basetype)); + size_t jj; + for(jj=0;jj<$1_dim1;jj++){ + size_t ii; + for(ii=0;ii<$1_dim0;ii++) + $1[ii][jj]=($1_basetype)_piData[jj*$1_dim0+ii]; + } +} + +%typemap(in) SWIGTYPE *(int *piAddrVar, int iRows, int iCols) { + $&1_ltype _piData=($&1_ltype)0; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + $1=($1_ltype)*_piData; +} +%typemap(in) SWIGTYPE { + +} + /* ----------------------------------------------------------------------------- * --- Output arguments --- * ----------------------------------------------------------------------------- */ @@ -134,24 +306,24 @@ iVarOut++; } -%typemap(out) double (int iRowsOut,int iColsOut,int* _piAddress), - float (int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) double (int iRowsOut,int iColsOut), + float (int iRowsOut,int iColsOut) { double temp; temp=(double)($result); iRowsOut=1; iColsOut=1; - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum)=iVarOut; iOutNum++; iVarOut++; } -%typemap(out) char (int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) char (int iRowsOut,int iColsOut) { char* temp; temp=(char*)&($result); iRowsOut=1; iColsOut=1; - createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum)=iVarOut; iOutNum++; iVarOut++; @@ -199,27 +371,36 @@ iVarOut++; } -%typemap(out) double *(int iRowsOut,int iColsOut,int* _piAddress), - float *(int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) double *(int iRowsOut,int iColsOut), + float *(int iRowsOut,int iColsOut) { double *temp; temp=(double *)($result); iRowsOut=1; iColsOut=1; - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, temp); LhsVar(iOutNum)=iVarOut; iOutNum++; iVarOut++; } -%typemap(out) char *(int iRowsOut,int iColsOut,int* _piAddress){ +%typemap(out) char *(int iRowsOut,int iColsOut){ iRowsOut=1; iColsOut=1; - createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result), &_piAddress); + createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result)); LhsVar(iOutNum)=iVarOut; iOutNum++; iVarOut++; } +%typemap(out) SWIGTYPE *(int iRowsOut,int iColsOut) { + iRowsOut=1; + iColsOut=1; + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; +} + /* ------------------------------------------------------------ * Enums mapped as integer values * ------------------------------------------------------------ */ Modified: branches/gsoc2009-sploving/Lib/scilab/typemaps.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-06-24 18:10:10 UTC (rev 11314) +++ branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-06-25 03:14:26 UTC (rev 11315) @@ -64,7 +64,7 @@ float *INPUT (int *piAddrVar, int iRows, int iCols, float temp), double *INPUT (int *piAddrVar, int iRows, int iCols, double temp) { double* _piData; - getVarAddressFromNumber($argnum, &piAddrVar); + getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { @@ -123,7 +123,7 @@ // Force the argument to be ignored. -%typemap(in) signed char *OUTPUT (signed temp), +%typemap(in,numinputs=0) signed char *OUTPUT (signed temp), unsigned char *OUTPUT (unsigned temp), short *OUTPUT (short temp), unsigned short *OUTPUT (unsigned short temp), @@ -169,13 +169,13 @@ } -%typemap(argout) double *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), - float *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(argout) double *OUTPUT(int iRowsOut,int iColsOut), + float *OUTPUT(int iRowsOut,int iColsOut) { double temp; temp=(double)(*$result); iRowsOut=1; iColsOut=1; - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp$argnum); LhsVar(iOutNum)=iVarOut; iOutNum++; iVarOut++; Modified: branches/gsoc2009-sploving/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Makefile.in 2009-06-24 18:10:10 UTC (rev 11314) +++ branches/gsoc2009-sploving/Makefile.in 2009-06-25 03:14:26 UTC (rev 11315) @@ -158,7 +158,7 @@ uffi_examples := cffi_examples := r_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/r/check.list) -scilab_examples := +scilab_examples :=$(shell sed '/^\#/d' $(srcdir)/Examples/scilab/check.list) # all examples check-%-examples : @@ -206,7 +206,7 @@ # check-lua-gifplot \ # check-csharp-gifplot \ # check-modula3-gifplot \ - check-scilab-gifplot + check-scilab-gifplot check-%-gifplot: gifplot-library @if test -z "$(skip-$*)"; then \ echo $* unknown; \ @@ -253,7 +253,7 @@ check-cffi-test-suite \ check-chicken-test-suite \ check-r-test-suite \ - check-scilab-test-suite + check-scilab-test-suite check-%-test-suite: @if test -z "$(skip-$*)"; then \ echo $* unknown; \ Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-24 18:10:10 UTC (rev 11314) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-25 03:14:26 UTC (rev 11315) @@ -99,7 +99,7 @@ Printf(f_runtime, "#include \"stack-c.h\"\n"); Printf(f_runtime, "#include \"sciprint.h\"\n"); Printf(f_runtime, "#include \"Scierror.h\"\n"); - Printf(f_runtime, "#include \"variable_api.h\"\n"); + Printf(f_runtime, "#include \"api_variable.h\"\n"); Printf(f_runtime, "#include \"localization.h\"\n"); /* Initialize the builder.sce file code */ @@ -187,7 +187,7 @@ if (overloaded) Append(overname, Getattr(n, "sym:overname")); - Printv(f->def, "int ", overname, " (char *fname,unsigned long fname_len) {\nint iOutNum=1;\nint iVarOut=Rhs+1;", NIL); + Printv(f->def, "int ", overname, " (char *fname,unsigned long fname_len) {\n", NIL); /* Emit all of the local variables for holding arguments */ emit_parameter_variables(l, f); @@ -199,8 +199,12 @@ /* Get number of required and total arguments */ int num_arguments = emit_num_arguments(l); int num_required = emit_num_required(l); + + /* the number of the output */ + int out_required = 0; //int varargs = emit_isvarargs(l); + if (constructor && num_arguments == 1 && num_required == 1) { if (Cmp(storage, "explicit") == 0) { Node *parent = Swig_methodclass(n); @@ -252,7 +256,8 @@ if ((tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode))) { Replaceall(tm, "$result", "result"); Printf(f->code, "%s\n", tm); - + if(strlen(Char(tm))!=0) + out_required++; } else { Swig_warning(WARN_TYPEMAP_OUT_UNDEF, input_file, line_number, "Unable to use return type %s in function %s.\n", SwigType_str(d, 0), iname); @@ -264,12 +269,21 @@ if ((tm = Getattr(p, "tmap:argout"))) { Printv(outarg, tm, "\n", NIL); p = Getattr(p, "tmap:argout:next"); + out_required++; } else { p = nextSibling(p); } } Printv(f->code, outarg, NIL); + + /* Insert the code checking for the number of input and output */ + if(out_required==0) out_required=1; + Printf(f->def,"CheckRhs(%d,%d);\n",num_required,num_required); + Printf(f->def,"CheckLhs(%d,%d);\n",out_required,out_required); + /* Insert the order of output parameters*/ + Printf(f->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); + /* Finish the the code for the function */ Printf(f->code, "return 0;\n"); Printf(f->code, "}\n"); @@ -312,8 +326,15 @@ String *getname = Swig_name_get(iname); String *setname = Swig_name_set(iname); - Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {\nint iOutNum=1;\nint iVarOut=Rhs+1;", NIL); + Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {\n", NIL); + /* Check the number of input and output */ + Printf(setf->def,"CheckRhs(1,1);\n"); + Printf(setf->def,"CheckLhs(1,1);\n"); + + /* Insert the order of output parameters*/ + Printf(setf->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); + /* add the local variable */ Wrapper_add_local(setf, "piAddrVar", "int *piAddrVar"); Wrapper_add_local(setf, "iRows", "int iRows"); @@ -339,8 +360,15 @@ /* deal with the get function */ Setattr(n, "wrap:name", getname); int addfail = 0; - Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len){\nint iOutNum=1;\nint iVarOut=Rhs+1;", NIL); + Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len){\n", NIL); + /* Check the number of input and output */ + Printf(getf->def,"CheckRhs(0,0);\n"); + Printf(getf->def,"CheckLhs(1,1);\n"); + + /* Insert the order of output parameters*/ + Printf(getf->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); + /* add local variabe */ Wrapper_add_local(getf, "piAddrOut", "int* _piAddress"); Wrapper_add_local(getf, "iRows", "int iRowsOut"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-06-27 09:08:27
|
Revision: 11325 http://swig.svn.sourceforge.net/swig/?rev=11325&view=rev Author: sploving Date: 2009-06-27 09:08:23 +0000 (Sat, 27 Jun 2009) Log Message: ----------- add INPUT/OUTPUT support Modified Paths: -------------- branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Lib/scilab/typemaps.i branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/scilab/pointer/ branches/gsoc2009-sploving/Examples/scilab/pointer/example.c branches/gsoc2009-sploving/Examples/scilab/pointer/example.i branches/gsoc2009-sploving/Examples/scilab/pointer/makefile branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci Modified: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-06-26 23:11:27 UTC (rev 11324) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-06-27 09:08:23 UTC (rev 11325) @@ -25,6 +25,7 @@ <li><a href="#scilab_nn10">Global variables</a> <li><a href="#Scilab_nn11">Constants</a> <li><a href="#Scilab_nn12">Enums</a> +<li><a href="#Octave_nn13">Pointers</a> </ul> </ul> </div> @@ -297,4 +298,46 @@ </pre></div> +<H3><a name="Octave_nn13"></a>27.3.5 Pointers</H3> +<p> + Pointers are fully supported by SWIG. One way to deal with the pointers is using the INPUT and OUTPUT typemaps. For example, in order to call C functions as the following: +</p> + <div class="code"><pre> +void sub(int *x, int *y, int *result) { + *result = *x - *y; +} +int divide(int n, int d, int *r) { + int q; + q = n/d; + *r = n - q*d; + return q; +} +</pre></div> +<p> We could write a interface file: +</p> + <div class="code"><pre>%module example +%include typemaps.i +extern void sub(int *INPUT, int *INPUT, int *OUTPUT); +%apply int *OUTPUT { int *r }; +extern int divide(int n, int d, int *r); +</pre></div> +<p>Then run it in Scilab: +</p> + + <div class="targetlang"><pre> +scilab:1> r = sub(37,42); +scilab:2> printf(" 37 - 42 = %i\n",r); + 37 - 42 = -5 + +scilab:3> [q,r] = divide(42,37); +scilab:4> printf(" 42/37 = %d remainder %d\n",q,r); + 42/37 = 1 remainder 5 + +</pre></div> +<p> From the example above, it is clear that instead of passing a pointer to an object, +we only need a real value instead. +</p> + + + Added: branches/gsoc2009-sploving/Examples/scilab/pointer/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/example.c (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/example.c 2009-06-27 09:08:23 UTC (rev 11325) @@ -0,0 +1,16 @@ +/* File : example.c */ + +void add(int *x, int *y, int *result) { + *result = *x + *y; +} + +void sub(int *x, int *y, int *result) { + *result = *x - *y; +} + +int divide(int n, int d, int *r) { + int q; + q = n/d; + *r = n - q*d; + return q; +} Added: branches/gsoc2009-sploving/Examples/scilab/pointer/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/example.i 2009-06-27 09:08:23 UTC (rev 11325) @@ -0,0 +1,30 @@ +/* File : example.i */ +%module example + +%{ +extern void add(int *, int *, int *); +extern void sub(int *, int *, int *); +extern int divide(int, int, int *); +%} + +/* This example illustrates a couple of different techniques + for manipulating C pointers */ + +/* First we'll use the pointer library +extern void add(int *x, int *y, int *result); +%include cpointer.i +%pointer_functions(int, intp);*/ + +/* Next we'll use some typemaps */ + +%include typemaps.i +extern void sub(int *INPUT, int *INPUT, int *OUTPUT); + +/* Next we'll use typemaps and the %apply directive */ + +%apply int *OUTPUT { int *r }; +extern int divide(int n, int d, int *r); + + + + Added: branches/gsoc2009-sploving/Examples/scilab/pointer/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/makefile 2009-06-27 09:08:23 UTC (rev 11325) @@ -0,0 +1,15 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c + +check: all Added: branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-06-27 09:08:23 UTC (rev 11325) @@ -0,0 +1,20 @@ +// builder the *.so +exec builder.sce + +//loader the *.so +exec loader.sce + +//Now try the typemap library +//This should be much easier. Now how it is no longer +//necessary to manufacture pointers. + +printf("Trying the typemap library\n"); +r = sub(37,42); +printf(" 37 - 42 = %i\n",r); + +//Now try the version with multiple return values + +printf("Testing multiple return values\n"); +[q,r] = divide(42,37); +printf(" 42/37 = %d remainder %d\n",q,r); + Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-26 23:11:27 UTC (rev 11324) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-27 09:08:23 UTC (rev 11325) @@ -31,7 +31,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); $1=($1_ltype)*_piData; @@ -44,12 +44,13 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); $1=($1_ltype)*_pstStrings; } + /* Pointers */ %typemap(in) signed char *(int *piAddrVar, int iRows, int iCols) { char* _piData; @@ -58,7 +59,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { @@ -80,7 +81,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { @@ -108,7 +109,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { @@ -130,7 +131,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { @@ -150,7 +151,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); $1=strdup(_pstStrings); @@ -163,7 +164,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { @@ -185,7 +186,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { @@ -210,7 +211,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { @@ -233,7 +234,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { @@ -254,7 +255,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); $1=($1_ltype)*_piData; Modified: branches/gsoc2009-sploving/Lib/scilab/typemaps.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-06-26 23:11:27 UTC (rev 11324) +++ branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-06-27 09:08:23 UTC (rev 11325) @@ -68,7 +68,7 @@ getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, 1); + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); temp=($*1_ltype)*_piData; Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-26 23:11:27 UTC (rev 11324) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-27 09:08:23 UTC (rev 11325) @@ -35,6 +35,7 @@ SCILAB(): f_builder_code(NewString("")), f_example_code(NewString("")), hasfunction_flag(false), hasconstant_flag(false) { } + /* ------------------------------------------------------------ * main() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-06-29 15:27:12
|
Revision: 11330 http://swig.svn.sourceforge.net/swig/?rev=11330&view=rev Author: sploving Date: 2009-06-29 15:27:06 +0000 (Mon, 29 Jun 2009) Log Message: ----------- add complex matrix support Modified Paths: -------------- branches/gsoc2009-sploving/Examples/scilab/variables/example.c branches/gsoc2009-sploving/Examples/scilab/variables/example.i branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Modified: branches/gsoc2009-sploving/Examples/scilab/variables/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-06-29 13:15:56 UTC (rev 11329) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-06-29 15:27:06 UTC (rev 11330) @@ -23,8 +23,11 @@ float fvar = 0; double dvar = 0; char *strvar=0; +double *Foo1; +double *Foo2; + /* A debugging function to print out their values */ void print_vars() { Modified: branches/gsoc2009-sploving/Examples/scilab/variables/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.i 2009-06-29 13:15:56 UTC (rev 11329) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.i 2009-06-29 15:27:06 UTC (rev 11330) @@ -17,6 +17,8 @@ extern float fvar; extern double dvar; extern char *strvar; + extern double *Foo1; + extern double *Foo2; %} Modified: branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-06-29 13:15:56 UTC (rev 11329) +++ branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-06-29 15:27:06 UTC (rev 11330) @@ -18,6 +18,8 @@ fvar_set (3.14159); dvar_set (2.1828); strvar_set("Hello World"); +Foo1_set([1,2,3;4,5,6]); +Foo2_set([1+2*%i,2+3*%i;3+4*%i,7+8*%i]); // Now print out the values of the variables @@ -35,6 +37,8 @@ printf("dvar = %f\n", dvar_get()); printf("cvar = %s\n", cvar_get()); printf("strvar = %s\n", strvar_get()); +Foo1_get(); +Foo2_get(); printf("\nVariables (values printed from C)\n"); Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-29 13:15:56 UTC (rev 11329) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-06-29 15:27:06 UTC (rev 11330) @@ -73,8 +73,8 @@ %typemap(in) short *(int *piAddrVar, int iRows, int iCols), unsigned char *(int *piAddrVar, int iRows, int iCols), - short [](int *piAddrVar, int iRows, int iCols), - unsigned char [](int *piAddrVar, int iRows, int iCols) { + short [ANY](int *piAddrVar, int iRows, int iCols), + unsigned char [ANY](int *piAddrVar, int iRows, int iCols) { short* _piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); @@ -98,11 +98,11 @@ unsigned int *(int *piAddrVar, int iRows, int iCols), long *(int *piAddrVar, int iRows, int iCols), unsigned long *(int *piAddrVar, int iRows, int iCols), - unsigned short [](int *piAddrVar, int iRows, int iCols), - int [](int *piAddrVar, int iRows, int iCols), - unsigned int [](int *piAddrVar, int iRows, int iCols), - long [](int *piAddrVar, int iRows, int iCols), - unsigned long [](int *piAddrVar, int iRows, int iCols) { + unsigned short [ANY](int *piAddrVar, int iRows, int iCols), + int [ANY](int *piAddrVar, int iRows, int iCols), + unsigned int [ANY](int *piAddrVar, int iRows, int iCols), + long [ANY](int *piAddrVar, int iRows, int iCols), + unsigned long [ANY](int *piAddrVar, int iRows, int iCols) { int* _piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); @@ -123,28 +123,48 @@ %typemap(in) double *(int *piAddrVar, int iRows, int iCols), float *(int *piAddrVar, int iRows, int iCols), - double [](int *piAddrVar, int iRows, int iCols), - float [](int *piAddrVar, int iRows, int iCols){ + double [ANY](int *piAddrVar, int iRows, int iCols), + float [ANY](int *piAddrVar, int iRows, int iCols){ double* _piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); - if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + if (getVarType(piAddrVar) == sci_matrix ){ + if(!isVarComplex(piAddrVar)) { + isComplex=0; + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + } + } + else { + isComplex=1; + double *_pdblImg; + getComplexMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData, &_pdblImg); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc(2*iRows*iCols*sizeof($*1_ltype)); + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + $1[index+iRows*iCols]=(double)_pdblImg[index]; + } + } } - getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { - free($1); + else { + Scierror(999, _("%s: Wrong type for input argument #%d: double matrix expected.\n"), fname, $argnum); } - $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; - } } + + %typemap(in) char *(int *piAddrVar, int iRows, int iCols), - char [](int *piAddrVar, int iRows, int iCols){ + char [ANY](int *piAddrVar, int iRows, int iCols){ char* _pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); @@ -170,12 +190,13 @@ if($1!=NULL) { free($1); } - $1=($1_ltype)malloc($1_dim0*$1_dim1*sizeof($1_basetype)); - size_t jj; - for(jj=0;jj<$1_dim1;jj++){ - size_t ii; - for(ii=0;ii<$1_dim0;ii++) - $1[ii][jj]=($1_basetype)_piData[jj*$1_dim0+ii]; + $1=($1_ltype)malloc(iRows*sizeof($*1_ltype)); + size_t ii; + for(ii=0;ii<iRows;ii++){ + $1[ii]=($*1_ltype)malloc(iCols*sizeof($1_basetype)); + size_t jj; + for(jj=0;jj<iCols;jj++) + $1[ii][jj]=($1_basetype)_piData[jj*iRows+ii]; } } @@ -192,12 +213,13 @@ if($1!=NULL) { free($1); } - $1=($1_ltype)malloc($1_dim0*$1_dim1*sizeof($1_basetype)); - size_t jj; - for(jj=0;jj<$1_dim1;jj++){ - size_t ii; - for(ii=0;ii<$1_dim0;ii++) - $1[ii][jj]=($1_basetype)_piData[jj*$1_dim0+ii]; + $1=($1_ltype)malloc(iRows*sizeof($*1_ltype)); + size_t ii; + for(ii=0;ii<iRows;ii++){ + $1[ii]=($*1_ltype)malloc(iCols*sizeof($1_basetype)); + size_t jj; + for(jj=0;jj<iCols;jj++) + $1[ii][jj]=($1_basetype)_piData[jj*iRows+ii]; } } @@ -217,12 +239,13 @@ if($1!=NULL) { free($1); } - $1=($1_ltype)malloc($1_dim0*$1_dim1*sizeof($1_basetype)); - size_t jj; - for(jj=0;jj<$1_dim1;jj++){ - size_t ii; - for(ii=0;ii<$1_dim0;ii++) - $1[ii][jj]=($1_basetype)_piData[jj*$1_dim0+ii]; + $1=($1_ltype)malloc(iRows*sizeof($*1_ltype)); + size_t ii; + for(ii=0;ii<iRows;ii++){ + $1[ii]=($*1_ltype)malloc(iCols*sizeof($1_basetype)); + size_t jj; + for(jj=0;jj<iCols;jj++) + $1[ii][jj]=($1_basetype)_piData[jj*iRows+ii]; } } @@ -240,12 +263,13 @@ if($1!=NULL) { free($1); } - $1=($1_ltype)malloc($1_dim0*$1_dim1*sizeof($1_basetype)); - size_t jj; - for(jj=0;jj<$1_dim1;jj++){ - size_t ii; - for(ii=0;ii<$1_dim0;ii++) - $1[ii][jj]=($1_basetype)_piData[jj*$1_dim0+ii]; + $1=($1_ltype)malloc(iRows*sizeof($*1_ltype)); + size_t ii; + for(ii=0;ii<iRows;ii++){ + $1[ii]=($*1_ltype)malloc(iCols*sizeof($1_basetype)); + size_t jj; + for(jj=0;jj<iCols;jj++) + $1[ii][jj]=($1_basetype)_piData[jj*iRows+ii]; } } @@ -372,16 +396,20 @@ iVarOut++; } -%typemap(out) double *(int iRowsOut,int iColsOut), - float *(int iRowsOut,int iColsOut) { - double *temp; - temp=(double *)($result); - iRowsOut=1; - iColsOut=1; - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, temp); - LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; +%typemap(out) double *, + float * { + if(isComplex) { + createComplexMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result,&$result[iRowsOut*iColsOut]); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; + } + else { + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; + } } %typemap(out) char *(int iRowsOut,int iColsOut){ @@ -402,6 +430,7 @@ iVarOut++; } + /* ------------------------------------------------------------ * Enums mapped as integer values * ------------------------------------------------------------ */ Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-29 13:15:56 UTC (rev 11329) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-06-29 15:27:06 UTC (rev 11330) @@ -315,18 +315,32 @@ String *name = Getattr(n, "name"); String *iname = Getattr(n, "sym:name"); SwigType *t = Getattr(n, "type"); - + if (!addSymbol(iname, n)) return SWIG_ERROR; + String *rowname=NewString(""); + String *colname=NewString(""); + String *iscomplexname=NewString(""); + Printf(rowname,"iRows_%s",iname); + Printf(colname,"iCols_%s",iname); + Printf(iscomplexname,"isComplex_%s",iname); + /* two wrapper function to get and set the variable */ String *tm; + String *globalVar=NewString(""); Wrapper *getf = NewWrapper(); Wrapper *setf = NewWrapper(); String *getname = Swig_name_get(iname); String *setname = Swig_name_set(iname); - + + Printf(globalVar, "int %s=0;\n",rowname); + Printf(globalVar, "int %s=0;\n",colname); + if(!Strcmp(t,"p.double")) + Printf(globalVar, "int %s=0;\n\n",iscomplexname); + else + Printf(globalVar,"\n"); Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {\n", NIL); /* Check the number of input and output */ @@ -338,14 +352,17 @@ /* add the local variable */ Wrapper_add_local(setf, "piAddrVar", "int *piAddrVar"); - Wrapper_add_local(setf, "iRows", "int iRows"); - Wrapper_add_local(setf, "iCols", "int iCols"); + //Wrapper_add_local(setf, "iRows", "int iRows"); + //Wrapper_add_local(setf, "iCols", "int iCols"); /* deal with the set function */ if (is_assignable(n)) { Setattr(n, "wrap:name", setname); if ((tm = Swig_typemap_lookup("in", n, name, 0))) { Replaceall(tm, "$argnum", "1"); + Replaceall(tm,"iRows",rowname); + Replaceall(tm,"iCols",colname); + Replaceall(tm,"isComplex",iscomplexname); emit_action_code(n, setf->code, tm); Delete(tm); } else { @@ -372,11 +389,14 @@ /* add local variabe */ Wrapper_add_local(getf, "piAddrOut", "int* _piAddress"); - Wrapper_add_local(getf, "iRows", "int iRowsOut"); - Wrapper_add_local(getf, "iColsOut", "int iColsOut "); + //Wrapper_add_local(getf, "iRows", "int iRowsOut"); + //Wrapper_add_local(getf, "iColsOut", "int iColsOut "); if ((tm = Swig_typemap_lookup("out", n, name, 0))) { Replaceall(tm, "$result", name); + Replaceall(tm,"iRowsOut",rowname); + Replaceall(tm,"iColsOut",colname); + Replaceall(tm,"isComplex",iscomplexname); addfail = emit_action_code(n, getf->code, tm); Delete(tm); } else { @@ -386,6 +406,7 @@ /*Dump the wrapper function */ Append(getf->code, "}\n"); Wrapper_print(getf, f_wrappers); + Printf(f_header,"%s",globalVar); Printf(f_builder_code, "\"%s\",\"%s\";",getname,getname); return SWIG_OK; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-07-03 08:45:23
|
Revision: 11351 http://swig.svn.sourceforge.net/swig/?rev=11351&view=rev Author: sploving Date: 2009-07-03 08:45:07 +0000 (Fri, 03 Jul 2009) Log Message: ----------- clear up some code Modified Paths: -------------- branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Lib/scilab/typemaps.i branches/gsoc2009-sploving/Source/Modules/scilab.cxx Modified: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-07-02 22:42:45 UTC (rev 11350) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-07-03 08:45:07 UTC (rev 11351) @@ -208,7 +208,23 @@ c = 3 scilab:5> Foo_get() -ans = 4</pre></div> +ans = 4 + +scilab:6> Foo_set([1,2,3;4,5,6]); + +scilab:7> Foo_get() +ans = + + 1. 2. 3. + 4. 5. 6. +scilab:8> Foo_set([1+2*%i,2+3*%i;3+4*%i,7+8*%i]); + +scilab:9> Foo_get() + ans = + + 1. + 2.i 2. + 3.i + 3. + 4.i 7. + 8.i +</pre></div> <H3><a name="Scilab_nn11"></a>27.3.4 Constants</H3> Modified: branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-07-02 22:42:45 UTC (rev 11350) +++ branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-07-03 08:45:07 UTC (rev 11351) @@ -37,13 +37,10 @@ printf("dvar = %f\n", dvar_get()); printf("cvar = %s\n", cvar_get()); printf("strvar = %s\n", strvar_get()); -Foo1_get(); -Foo2_get(); +Foo1_get() +Foo2_get() printf("\nVariables (values printed from C)\n"); -print_vars() +print_vars(); - - - Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-02 22:42:45 UTC (rev 11350) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-03 08:45:07 UTC (rev 11351) @@ -62,6 +62,77 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); + $1=($1_ltype)_piData; +} + +%typemap(in) short *(int *piAddrVar, int iRows, int iCols), + unsigned char *(int *piAddrVar, int iRows, int iCols) { + short* _piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); + $1=($1_ltype)_piData; +} + +%typemap(in) unsigned short *(int *piAddrVar, int iRows, int iCols), + int *(int *piAddrVar, int iRows, int iCols), + unsigned int *(int *piAddrVar, int iRows, int iCols), + long *(int *piAddrVar, int iRows, int iCols), + unsigned long *(int *piAddrVar, int iRows, int iCols) { + int* _piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); + $1=($1_ltype)_piData; +} + +%typemap(in) double *(int *piAddrVar, int iRows, int iCols), + float *(int *piAddrVar, int iRows, int iCols) { + double* _piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + $1=($1_ltype)_piData; +} + +%typemap(in) char *(int *piAddrVar, int iRows, int iCols){ + char* _pstStrings; + int _piLength; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + $1=strdup(_pstStrings); +} + +%typemap(in) signed char [ANY](int *piAddrVar, int iRows, int iCols) { + char* _piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); if($1!=NULL) { free($1); } @@ -71,9 +142,7 @@ } } -%typemap(in) short *(int *piAddrVar, int iRows, int iCols), - unsigned char *(int *piAddrVar, int iRows, int iCols), - short [ANY](int *piAddrVar, int iRows, int iCols), +%typemap(in) short [ANY](int *piAddrVar, int iRows, int iCols), unsigned char [ANY](int *piAddrVar, int iRows, int iCols) { short* _piData; int index; @@ -93,12 +162,7 @@ } } -%typemap(in) unsigned short *(int *piAddrVar, int iRows, int iCols), - int *(int *piAddrVar, int iRows, int iCols), - unsigned int *(int *piAddrVar, int iRows, int iCols), - long *(int *piAddrVar, int iRows, int iCols), - unsigned long *(int *piAddrVar, int iRows, int iCols), - unsigned short [ANY](int *piAddrVar, int iRows, int iCols), +%typemap(in) unsigned short [ANY](int *piAddrVar, int iRows, int iCols), int [ANY](int *piAddrVar, int iRows, int iCols), unsigned int [ANY](int *piAddrVar, int iRows, int iCols), long [ANY](int *piAddrVar, int iRows, int iCols), @@ -121,50 +185,29 @@ } } -%typemap(in) double *(int *piAddrVar, int iRows, int iCols), - float *(int *piAddrVar, int iRows, int iCols), - double [ANY](int *piAddrVar, int iRows, int iCols), +%typemap(in) double [ANY](int *piAddrVar, int iRows, int iCols), float [ANY](int *piAddrVar, int iRows, int iCols){ double* _piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); - if (getVarType(piAddrVar) == sci_matrix ){ - if(!isVarComplex(piAddrVar)) { - isComplex=0; - getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { - free($1); - } - $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; - } - } - else { - isComplex=1; - double *_pdblImg; - getComplexMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData, &_pdblImg); - if($1!=NULL) { - free($1); - } - $1=($1_ltype)malloc(2*iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; - $1[index+iRows*iCols]=(double)_pdblImg[index]; - } - } + if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } - else { - Scierror(999, _("%s: Wrong type for input argument #%d: double matrix expected.\n"), fname, $argnum); + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); } + $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + } } -%typemap(in) char *(int *piAddrVar, int iRows, int iCols), - char [ANY](int *piAddrVar, int iRows, int iCols){ +%typemap(in) char [ANY](int *piAddrVar, int iRows, int iCols){ char* _pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); @@ -177,6 +220,7 @@ $1=strdup(_pstStrings); } + /* Arrays */ %typemap(in) signed char [ANY][ANY](int *piAddrVar, int iRows, int iCols) { char* _piData; @@ -300,8 +344,6 @@ iColsOut=1; createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(out) short (int iRowsOut,int iColsOut,int* _piAddress), @@ -312,8 +354,6 @@ iColsOut=1; createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(out) int (int iRowsOut,int iColsOut,int* _piAddress), @@ -327,8 +367,6 @@ iColsOut=1; createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(out) double (int iRowsOut,int iColsOut), @@ -339,8 +377,6 @@ iColsOut=1; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(out) char (int iRowsOut,int iColsOut) { @@ -350,8 +386,6 @@ iColsOut=1; createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(out,noblock=1) void { @@ -365,8 +399,6 @@ iColsOut=1; createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(out) short *(int iRowsOut,int iColsOut,int* _piAddress), @@ -377,8 +409,6 @@ iColsOut=1; createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(out) int *(int iRowsOut,int iColsOut,int* _piAddress), @@ -392,24 +422,18 @@ iColsOut=1; createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(out) double *, float * { - if(isComplex) { - createComplexMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result,&$result[iRowsOut*iColsOut]); - LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; - } - else { - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result); - LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; - } + double *temp; + temp=(double *)($result); + iRowsOut=1; + iColsOut=1; + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, temp); + LhsVar(iOutNum)=iVarOut; + iOutNum++; + iVarOut++; } %typemap(out) char *(int iRowsOut,int iColsOut){ @@ -417,20 +441,179 @@ iColsOut=1; createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result)); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } +%typemap(freearg, noblock=1) char * { + if ($1) free($1); +} + %typemap(out) SWIGTYPE *(int iRowsOut,int iColsOut) { iRowsOut=1; iColsOut=1; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } +/* ----------------------------------------------------------------------------- + * --- Variable input --- + * ----------------------------------------------------------------------------- */ +%typemap(varin,noblock=1) signed char, + unsigned char, + short, + unsigned short, + int, + unsigned int, + long, + unsigned long, + float, + double { + double* _piData; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + $1=($1_ltype)*_piData; +} + +%typemap(varin,noblock=1) char { + char* _pstStrings; + int _piLength; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + $1=($1_ltype)*_pstStrings; +} + +%typemap(varin,noblock=1) char *, + char [ANY] { + char* _pstStrings; + int _piLength; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + $1=strdup(_pstStrings); +} + +%typemap(varin,noblock=1) double *, + float * { + double* _piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) == sci_matrix ){ + if(!isVarComplex(piAddrVar)) { + isComplex=0; + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + } + } + else { + isComplex=1; + double *_pdblImg; + getComplexMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData, &_pdblImg); + if($1!=NULL) { + free($1); + } + $1=($1_ltype)malloc(2*iRows*iCols*sizeof($*1_ltype)); + for(index=0;index<iRows*iCols;index++){ + $1[index]=($*1_ltype)_piData[index]; + $1[index+iRows*iCols]=(double)_pdblImg[index]; + } + } + } + else { + Scierror(999, _("%s: Wrong type for input argument #%d: double matrix expected.\n"), fname, $argnum); + } +} + +/* ----------------------------------------------------------------------------- + * --- Variable output --- + * ----------------------------------------------------------------------------- */ +/* Basic C types */ +%typemap(varout,noblock=1) signed char { + int* _piAddress; + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &$result, &_piAddress); + LhsVar(iOutNum)=iVarOut; +} + +%typemap(varout,noblock=1) short { + int* _piAddress; + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &$result, &_piAddress); + LhsVar(iOutNum)=iVarOut; +} + +%typemap(varout,noblock=1) unsigned char { + int* _piAddress; + short temp; + temp=$result; + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + LhsVar(iOutNum)=iVarOut; +} + +%typemap(varout,noblock=1) int, + unsigned int, + unsigned short, + unsigned long, + long { + int* _piAddress; + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &$result, &_piAddress); + LhsVar(iOutNum)=iVarOut; +} + +%typemap(varout,noblock=1) double { + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result); + LhsVar(iOutNum)=iVarOut; +} + +%typemap(varout,noblock=1) float { + double temp; + temp=(double)$result; + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp); + LhsVar(iOutNum)=iVarOut; +} + +%typemap(varout,noblock=1) char { + char* temp; + temp=(char*)&($result); + createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp); + LhsVar(iOutNum)=iVarOut; +} + +%typemap(varout,noblock=1) char * { + createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result)); + LhsVar(iOutNum)=iVarOut; +} + +%typemap(varout,noblock=1) double *, + float * { + if(isComplex) { + createComplexMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result,&$result[iRowsOut*iColsOut]); + LhsVar(iOutNum)=iVarOut; + } + else { + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result); + LhsVar(iOutNum)=iVarOut; + } +} + /* ------------------------------------------------------------ * Enums mapped as integer values * ------------------------------------------------------------ */ Modified: branches/gsoc2009-sploving/Lib/scilab/typemaps.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-07-02 22:42:45 UTC (rev 11350) +++ branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-07-03 08:45:07 UTC (rev 11351) @@ -141,8 +141,6 @@ iColsOut=1; createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(argout) short *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), @@ -151,8 +149,6 @@ iColsOut=1; createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } %typemap(argout) int *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), @@ -164,8 +160,6 @@ iColsOut=1; createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } @@ -177,8 +171,6 @@ iColsOut=1; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp$argnum); LhsVar(iOutNum)=iVarOut; - iOutNum++; - iVarOut++; } Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-07-02 22:42:45 UTC (rev 11350) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-07-03 08:45:07 UTC (rev 11351) @@ -256,6 +256,8 @@ if ((tm = Swig_typemap_lookup_out("out", n, "result", f, actioncode))) { Replaceall(tm, "$result", "result"); + if(out_required>0) + Printf(f->code,"iOutNum++;\niVarOut++;\n"); Printf(f->code, "%s\n", tm); if(strlen(Char(tm))!=0) out_required++; @@ -268,7 +270,9 @@ String *outarg = NewString(""); for (p = l; p;) { if ((tm = Getattr(p, "tmap:argout"))) { - Printv(outarg, tm, "\n", NIL); + if(out_required>0) + Printf(f->code,"iOutNum++;\niVarOut++;\n"); + Printv(outarg, tm, "\n", NIL); p = Getattr(p, "tmap:argout:next"); out_required++; } else { @@ -277,13 +281,37 @@ } Printv(f->code, outarg, NIL); + /* Insert cleanup code */ + String *cleanup = NewString(""); + for (p = l; p;) { + if ((tm = Getattr(p, "tmap:freearg"))) { + if (tm && (Len(tm) != 0)) { + Printv(cleanup, tm, "\n", NIL); + } + p = Getattr(p, "tmap:freearg:next"); + } else { + p = nextSibling(p); + } + } + + /* Output cleanup code */ + Printv(f->code, cleanup, NIL); + /* Insert the code checking for the number of input and output */ - if(out_required==0) out_required=1; + int flag; + if(out_required==0) { + out_required=1; + flag=0; + } + else { + flag=1; + } Printf(f->def,"CheckRhs(%d,%d);\n",num_required,num_required); Printf(f->def,"CheckLhs(%d,%d);\n",out_required,out_required); /* Insert the order of output parameters*/ - Printf(f->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); + if(flag) + Printf(f->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); /* Finish the the code for the function */ Printf(f->code, "return 0;\n"); @@ -347,18 +375,13 @@ Printf(setf->def,"CheckRhs(1,1);\n"); Printf(setf->def,"CheckLhs(1,1);\n"); - /* Insert the order of output parameters*/ - Printf(setf->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); - /* add the local variable */ Wrapper_add_local(setf, "piAddrVar", "int *piAddrVar"); - //Wrapper_add_local(setf, "iRows", "int iRows"); - //Wrapper_add_local(setf, "iCols", "int iCols"); - + /* deal with the set function */ if (is_assignable(n)) { Setattr(n, "wrap:name", setname); - if ((tm = Swig_typemap_lookup("in", n, name, 0))) { + if ((tm = Swig_typemap_lookup("varin", n, name, 0))) { Replaceall(tm, "$argnum", "1"); Replaceall(tm,"iRows",rowname); Replaceall(tm,"iCols",colname); @@ -387,12 +410,7 @@ /* Insert the order of output parameters*/ Printf(getf->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); - /* add local variabe */ - Wrapper_add_local(getf, "piAddrOut", "int* _piAddress"); - //Wrapper_add_local(getf, "iRows", "int iRowsOut"); - //Wrapper_add_local(getf, "iColsOut", "int iColsOut "); - - if ((tm = Swig_typemap_lookup("out", n, name, 0))) { + if ((tm = Swig_typemap_lookup("varout", n, name, 0))) { Replaceall(tm, "$result", name); Replaceall(tm,"iRowsOut",rowname); Replaceall(tm,"iColsOut",colname); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-07-04 06:48:45
|
Revision: 11360 http://swig.svn.sourceforge.net/swig/?rev=11360&view=rev Author: sploving Date: 2009-07-04 06:48:39 +0000 (Sat, 04 Jul 2009) Log Message: ----------- merge from trunk Modified Paths: -------------- branches/gsoc2009-sploving/CHANGES.current branches/gsoc2009-sploving/Doc/Manual/Extending.html branches/gsoc2009-sploving/Doc/Manual/Python.html branches/gsoc2009-sploving/Doc/Manual/Tcl.html branches/gsoc2009-sploving/Examples/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/allegrocl/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/cffi/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/chicken/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/clisp/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/common.mk branches/gsoc2009-sploving/Examples/test-suite/csharp/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/default_args.i branches/gsoc2009-sploving/Examples/test-suite/guile/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/guilescm/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/java/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/lua/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/mzscheme/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/nested_comment.i branches/gsoc2009-sploving/Examples/test-suite/ocaml/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/octave/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/pike/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/r/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/ruby/primitive_types_runme.rb branches/gsoc2009-sploving/Examples/test-suite/tcl/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/uffi/Makefile.in branches/gsoc2009-sploving/Lib/allkw.swg branches/gsoc2009-sploving/Lib/python/std_map.i branches/gsoc2009-sploving/Lib/ruby/rubyhead.swg branches/gsoc2009-sploving/Lib/ruby/rubyprimtypes.swg branches/gsoc2009-sploving/Lib/tcl/tclinit.swg branches/gsoc2009-sploving/README branches/gsoc2009-sploving/Source/CParse/parser.y branches/gsoc2009-sploving/Source/Modules/csharp.cxx branches/gsoc2009-sploving/Source/Modules/java.cxx branches/gsoc2009-sploving/Source/Swig/cwrap.c Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/java/wallkw_runme.java branches/gsoc2009-sploving/Examples/test-suite/li_reference.i branches/gsoc2009-sploving/Examples/test-suite/perl5/li_reference_runme.pl branches/gsoc2009-sploving/Examples/test-suite/wallkw.i Removed Paths: ------------- branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference.i branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference_runme.pl Property Changed: ---------------- branches/gsoc2009-sploving/ Property changes on: branches/gsoc2009-sploving ___________________________________________________________________ Modified: svn:mergeinfo - /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11291 + /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11359 Modified: branches/gsoc2009-sploving/CHANGES.current =================================================================== --- branches/gsoc2009-sploving/CHANGES.current 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/CHANGES.current 2009-07-04 06:48:39 UTC (rev 11360) @@ -1,13 +1,41 @@ Version 1.3.40 (in progress) ============================ +2009-07-03: olly + [Tcl] To complement USE_TCL_STUBS, add support for USE_TK_STUBS + and SWIG_TCL_STUBS_VERSION. Document all three in the Tcl chapter + of the manual. Based on patch from SF#2810380 by Christian + Gollwitzer. + +2009-07-02: wsfulton + Fix -Wallkw option as reported by Solomon Gibbs. + +2009-07-02: wsfulton + Fix syntax error when a nested struct contains a comment containing a * followed eventually by a /. + Regression from 1.3.37, reported by Solomon Gibbs. + +2009-06-30: olly + [Ruby] Undefine close and connect macros defined by Ruby API + headers as we don't need them and they can clash with C++ methods + being wrapped. Patch from Vit Ondruch in SF#2814430. + +2009-06-26: olly + [Ruby] Fix to handle FIXNUM values greater than MAXINT passed for a + double parameter. + +2009-06-24: wsfulton + Fix wrapping methods with default arguments and the compactdefaultargs feature + where a class is passed by value and is assigned a default value. The SwigValueWrapper + template workaround for a missing default constructor is no longer used as the code + generated does not call the default constructor. + 2009-06-16: wsfulton [Java,C#] Fix enum marshalling when %ignore is used on one of the enum items. Incorrect enum values were being passed to the C++ layer or compilation errors resulted. 2009-06-02: talby [Perl] Resolved reference.i overload support problem - identfied by John Potowsky. + identified by John Potowsky. 2009-05-26: wsfulton [C#] Improved std::map wrappers based on patch from Yuval Baror. The C# proxy Modified: branches/gsoc2009-sploving/Doc/Manual/Extending.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Extending.html 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Doc/Manual/Extending.html 2009-07-04 06:48:39 UTC (rev 11360) @@ -1025,7 +1025,7 @@ </div> <p> -<b><tt>int Len(String_or_char *s)</tt></b> +<b><tt>int Len(const String_or_char *s)</tt></b> </p> <div class="indent"> @@ -1033,7 +1033,7 @@ </div> <p> -<b><tt>char *Char(String_or_char *s)</tt></b> +<b><tt>char *Char(const String_or_char *s)</tt></b> </p> <div class="indent"> @@ -1041,7 +1041,7 @@ </div> <p> -<b><tt>void Append(String *s, String_or_char *t)</tt></b> +<b><tt>void Append(String *s, const String_or_char *t)</tt></b> </p> <div class="indent"> @@ -1049,7 +1049,7 @@ </div> <p> -<b><tt>void Insert(String *s, int pos, String_or_char *t)</tt></b> +<b><tt>void Insert(String *s, int pos, const String_or_char *t)</tt></b> </p> <div class="indent"> @@ -1162,7 +1162,7 @@ </div> <p> -<b><tt>Object *Getattr(Hash *h, String_or_char *key)</tt></b> +<b><tt>Object *Getattr(Hash *h, const String_or_char *key)</tt></b> </p> <div class="indent"> @@ -1171,7 +1171,7 @@ </div> <p> -<b><tt>int Setattr(Hash *h, String_or_char *key, Object_or_char *val)</tt></b> +<b><tt>int Setattr(Hash *h, const String_or_char *key, const Object_or_char *val)</tt></b> </p> <div class="indent"> @@ -1185,7 +1185,7 @@ </div> <p> -<b><tt>int Delattr(Hash *h, String_or_char *key)</tt></b> +<b><tt>int Delattr(Hash *h, const String_or_char *key)</tt></b> </p> <div class="indent"> @@ -1249,7 +1249,7 @@ </div> <p> -<b><tt>int *Setitem(List *x, int n, Object_or_char *val)</tt></b> +<b><tt>int *Setitem(List *x, int n, const Object_or_char *val)</tt></b> </p> <div class="indent"> @@ -1271,7 +1271,7 @@ </div> <p> -<b><tt>void Append(List *x, Object_or_char *t)</tt></b> +<b><tt>void Append(List *x, const Object_or_char *t)</tt></b> </p> <div class="indent"> @@ -1281,7 +1281,7 @@ </div> <p> -<b><tt>void Insert(String *s, int pos, Object_or_char *t)</tt></b> +<b><tt>void Insert(String *s, int pos, const Object_or_char *t)</tt></b> </p> <div class="indent"> @@ -1479,13 +1479,14 @@ </div> <p> -<b><tt>File *NewFile(const char *filename, const char *mode)</tt></b> +<b><tt>File *NewFile(const char *filename, const char *mode, List *newfiles)</tt></b> </p> <div class="indent"> Create a File object using the <tt>fopen()</tt> library call. This file differs from <tt>FILE *</tt> in that it can be placed in the standard -SWIG containers (lists, hashes, etc.). +SWIG containers (lists, hashes, etc.). The <tt>filename</tt> is added to the +<tt>newfiles</tt> list if <tt>newfiles</tt> is non-zero and the file was created successfully. </div> <p> @@ -1922,7 +1923,7 @@ </div> <p> -<b><tt>void SwigType_add_array(SwigType *ty, String_or_char *dim)</tt></b> +<b><tt>void SwigType_add_array(SwigType *ty, const String_or_char *size)</tt></b> </p> <div class="indent"> @@ -1962,7 +1963,7 @@ </div> <p> -<b><tt>void SwigType_add_qualifier(SwigType *ty, String_or_char *q)</tt></b> +<b><tt>void SwigType_add_qualifier(SwigType *ty, const String_or_char *q)</tt></b> </p> <div class="indent"> @@ -1971,7 +1972,7 @@ </div> <p> -<b><tt>void SwigType_add_memberpointer(SwigType *ty, String_or_char *cls)</tt></b> +<b><tt>void SwigType_add_memberpointer(SwigType *ty, const String_or_char *cls)</tt></b> </p> <div class="indent"> @@ -2292,7 +2293,7 @@ </p> <p> -<b><tt>String *SwigType_str(SwigType *ty, String_or_char *id = 0)</tt></b> +<b><tt>String *SwigType_str(SwigType *ty, const String_or_char *id = 0)</tt></b> </p> <div class="indent"> @@ -2303,7 +2304,7 @@ </div> <p> -<b><tt>String *SwigType_lstr(SwigType *ty, String_or_char *id = 0)</tt></b> +<b><tt>String *SwigType_lstr(SwigType *ty, const String_or_char *id = 0)</tt></b> </p> <div class="indent"> @@ -2312,7 +2313,7 @@ </div> <p> -<b><tt>String *SwigType_lcaststr(SwigType *ty, String_or_char *id = 0)</tt></b> +<b><tt>String *SwigType_lcaststr(SwigType *ty, const String_or_char *id = 0)</tt></b> </p> <div class="indent"> @@ -2323,7 +2324,7 @@ </div> <p> -<b><tt>String *SwigType_rcaststr(SwigType *ty, String_or_char *id = 0)</tt></b> +<b><tt>String *SwigType_rcaststr(SwigType *ty, const String_or_char *id = 0)</tt></b> </p> <div class="indent"> @@ -2776,6 +2777,7 @@ class PYTHON : public Language { protected: /* General DOH objects used for holding the strings */ + File *f_begin; File *f_runtime; File *f_header; File *f_wrappers; @@ -2791,22 +2793,25 @@ ... /* Initialize I/O */ - f_runtime = NewFile(outfile, "w"); - if (!f_runtime) { + f_begin = NewFile(outfile, "w", SWIG_output_files()); + if (!f_begin) { FileErrorDisplay(outfile); SWIG_exit(EXIT_FAILURE); } + f_runtime = NewString(""); f_init = NewString(""); f_header = NewString(""); f_wrappers = NewString(""); /* Register file targets with the SWIG file handler */ + Swig_register_filebyname("begin", f_begin); Swig_register_filebyname("header", f_header); Swig_register_filebyname("wrapper", f_wrappers); Swig_register_filebyname("runtime", f_runtime); Swig_register_filebyname("init", f_init); /* Output module initialization code */ + Swig_banner(f_begin); ... /* Emit code for children */ @@ -2814,16 +2819,18 @@ ... /* Write all to the file */ - Dump(f_header, f_runtime); - Dump(f_wrappers, f_runtime); - Wrapper_pretty_print(f_init, f_runtime); + Dump(f_runtime, f_begin); + Dump(f_header, f_begin); + Dump(f_wrappers, f_begin); + Wrapper_pretty_print(f_init, f_begin); /* Cleanup files */ + Delete(f_runtime); Delete(f_header); Delete(f_wrappers); Delete(f_init); - Close(f_runtime); - Delete(f_runtime); + Close(f_begin); + Delete(f_begin); return SWIG_OK; } Modified: branches/gsoc2009-sploving/Doc/Manual/Python.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Python.html 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Doc/Manual/Python.html 2009-07-04 06:48:39 UTC (rev 11360) @@ -339,7 +339,7 @@ setup.py is the tradition) <li> <tt>build_ext</tt> -- telling distutils to build extensions <li> <tt>--inplace</tt> -- this tells distutils to put the extension lib in the current dir. - Other wise, it will put it inside a build hierarchy, and you'd have to move it to use it. + Otherwise, it will put it inside a build hierarchy, and you'd have to move it to use it. </ul> <p> @@ -363,8 +363,8 @@ <div class="shell"><pre> $ swig -python example.i -$ gcc -c -fPIC example.c -$ gcc -c -fPIC example_wrap.c -I/usr/local/include/python2.0 +$ gcc -O2 -fPIC -c example.c +$ gcc -O2 -fPIC -c example_wrap.c -I/usr/local/include/python2.5 $ gcc -shared example.o example_wrap.o -o _example.so </pre></div> @@ -654,26 +654,19 @@ <div class="shell"><pre> $ swig -c++ -python example.i -$ g++ -c example.cxx -$ g++ -c example_wrap.cxx -I/usr/local/include/python2.0 +$ g++ -O2 -fPIC -c example.cxx +$ g++ -O2 -fPIC -c example_wrap.cxx -I/usr/local/include/python2.5 $ g++ -shared example.o example_wrap.o -o _example.so </pre></div> <p> -On some platforms, you could also need to generate -position-independent code (PIC), by using a compiler option such as -fPIC. -Notably, the x86_64 (Opteron and EM64T) platform requires it, and when -using the GNU Compiler Suite, you will need to modify the previous example -as follows: +The -fPIC option tells GCC to generate position-independent code (PIC) +which is required for most architectures (it's not vital on x86, but +still a good idea as it allows code pages from the library to be shared between +processes). Other compilers may need a different option specified instead of +-fPIC. </p> -<div class="shell"><pre> -$ swig -c++ -python example.i -$ g++ -fPIC -c example.cxx -$ g++ -fPIC -c example_wrap.cxx -I/usr/local/include/python2.0 -$ g++ -shared example.o example_wrap.o -o _example.so -</pre></div> - <p> In addition to this, you may need to include additional library files to make it work. For example, if you are using the Sun C++ compiler on @@ -683,7 +676,7 @@ <div class="shell"><pre> $ swig -c++ -python example.i $ CC -c example.cxx -$ CC -c example_wrap.cxx -I/usr/local/include/python2.0 +$ CC -c example_wrap.cxx -I/usr/local/include/python2.5 $ CC -G example.o example_wrap.o -L/opt/SUNWspro/lib -o _example.so -lCrun </pre></div> Modified: branches/gsoc2009-sploving/Doc/Manual/Tcl.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Tcl.html 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Doc/Manual/Tcl.html 2009-07-04 06:48:39 UTC (rev 11360) @@ -66,6 +66,7 @@ <ul> <li><a href="#Tcl_nn45">Proxy classes</a> </ul> +<li><a href="#Tcl_nn46">Tcl/Tk Stubs</a> </ul> </div> <!-- INDEX --> @@ -3409,5 +3410,26 @@ interesting things. </p> +<H2><a name="Tcl_nn46"></a>33.10 Tcl/Tk Stubs</H2> + +<p> +For background information about the Tcl Stubs feature, see +<a href="http://www.tcl.tk/doc/howto/stubs.html">http://www.tcl.tk/doc/howto/stubs.html</a>. +</p> + +<p> +As of SWIG 1.3.10, the generated C/C++ wrapper will use the Tcl Stubs +feature if compiled with <tt>-DUSE_TCL_STUBS</tt>. +</p> + +<p> +As of SWIG 1.3.40, the generated C/C++ wrapper will use the Tk Stubs +feature if compiled with <tt>-DUSE_TK_STUBS</tt>. Also, you can override +the minimum version to support which is passed to <tt>Tcl_InitStubs()</tt> +and <tt>Tk_InitStubs()</tt> with <tt>-DSWIG_TCL_STUBS_VERSION="8.3"</tt> +or the version being compiled with using +<tt>-DSWIG_TCL_STUBS_VERSION=TCL_VERSION</tt>. +</p> + </body> </html> Modified: branches/gsoc2009-sploving/Examples/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -335,12 +335,13 @@ # ---------------------------------------------------------------- # Build a C dynamically loadable module +# Note: Octave requires C++ compiler when compiling C wrappers # ---------------------------------------------------------------- octave: $(SRCS) $(SWIG) -octave $(SWIGOPT) $(INTERFACEPATH) - $(CXX) -g -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(CXXSRCS) $(INCLUDES) -I$(OCTAVE_INCLUDE) - $(CC) -g -c $(CCSHARED) $(CFLAGS) $(SRCS) $(INCLUDES) $(OCTAVE_INCLUDE) + $(CXX) -g -c $(CCSHARED) $(CFLAGS) $(ICXXSRCS) $(INCLUDES) -I$(OCTAVE_INCLUDE) + $(CC) -g -c $(CCSHARED) $(CFLAGS) $(SRCS) $(INCLUDES) $(LDSHARED) $(CFLAGS) $(OBJS) $(IOBJS) $(OCTAVE_DLNK) $(LIBS) -o $(LIBPREFIX)$(TARGET)$(OCTAVE_SO) # ----------------------------------------------------------------- Modified: branches/gsoc2009-sploving/Examples/test-suite/allegrocl/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/allegrocl/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/allegrocl/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -89,8 +89,12 @@ include $(srcdir)/../common.mk +# Overridden variables here # SWIGOPT += -debug-module 4 +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/cffi/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/cffi/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/cffi/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -11,10 +11,14 @@ include $(srcdir)/../common.mk +# Overridden variables here # no C++ tests for now CPP_TEST_CASES = #C_TEST_CASES += +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/chicken/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/chicken/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/chicken/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -23,10 +23,21 @@ include $(srcdir)/../common.mk - # Overridden variables here SWIGOPT += -nounit +# Custom tests - tests with additional commandline options +# If there exists a PROXYSUFFIX runme file, we also generate the wrapper +# with the -proxy argument +%.cppproxy: SWIGOPT += -proxy +%.cppproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) + +%.cproxy: SWIGOPT += -proxy +%.cproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) + +%.multiproxy: SWIGOPT += -proxy -noclosuses +%.multiproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) + # Rules for the different types of tests %.cpptest: $(setup) @@ -57,36 +68,28 @@ +$(swig_and_compile_external) $(run_testcase) -# Runs the testcase. A testcase is only run if -# a file is found which has _runme.scm appended after the testcase name. -run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CHICKEN_CSI) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; - -# If there exists a PROXYSUFFIX runme file, we also generate the wrapper -# with the -proxy argument -%.cppproxy: SWIGOPT += -proxy -%.cppproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) %.cppproxy: echo "$(ACTION)ing testcase $* (with run test) under chicken with -proxy" +$(swig_and_compile_cpp) $(run_testcase) -%.cproxy: SWIGOPT += -proxy -%.cproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) %.cproxy: echo "$(ACTION)ing testcase $* (with run test) under chicken with -proxy" +$(swig_and_compile_c) $(run_testcase) -%.multiproxy: SWIGOPT += -proxy -noclosuses -%.multiproxy: SCRIPTSUFFIX = $(PROXYSUFFIX) %.multiproxy: echo "$(ACTION)ing testcase $* (with run test) under chicken with -proxy" +$(swig_and_compile_multi_cpp) $(run_testcase) +# Runs the testcase. A testcase is only run if +# a file is found which has _runme.scm appended after the testcase name. +run_testcase = \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CHICKEN_CSI) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ + fi; + # Clean %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/clisp/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/clisp/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/clisp/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -11,10 +11,14 @@ include $(srcdir)/../common.mk +# Overridden variables here # no C++ tests for now CPP_TEST_CASES = #C_TEST_CASES += +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/common.mk 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/common.mk 2009-07-04 06:48:39 UTC (rev 11360) @@ -16,8 +16,8 @@ # b) Define rules for %.ctest, %.cpptest, %.multicpptest and %.clean. # c) Define srcdir, top_srcdir and top_builddir (these are the # equivalent to configure's variables of the same name). -# 3) One off special commandline options can be achieved by adding a -# test case to CUSTOM_TEST_CASES and defining rules to run and test. +# 3) One off special commandline options for a testcase can be added. +# See custom tests below. # # The 'check' target runs the testcases including SWIG invocation, # C/C++ compilation, target language compilation (if any) and runtime @@ -64,14 +64,14 @@ LIBS = -L. LIBPREFIX = lib ACTION = check -INTERFACEDIR = $(if $(wildcard $*.i), ./, ../) +INTERFACEDIR = ../ # # Please keep test cases in alphabetical order. # Note that any whitespace after the last entry in each list will break make # -# Broken C++ test cases. (Can be run individually using make testcase.cpptest.) +# Broken C++ test cases. (Can be run individually using: make testcase.cpptest) CPP_TEST_BROKEN += \ constants \ cpp_broken \ @@ -85,12 +85,12 @@ template_expr -# Broken C test cases. (Can be run individually using make testcase.ctest.) +# Broken C test cases. (Can be run individually using: make testcase.ctest) C_TEST_BROKEN += \ tag_no_clash_with_variable -# C++ test cases. (Can be run individually using make testcase.cpptest.) +# C++ test cases. (Can be run individually using: make testcase.cpptest) CPP_TEST_CASES += \ abstract_access \ abstract_inherit \ @@ -394,6 +394,7 @@ virtual_destructor \ virtual_poly \ voidtest \ + wallkw \ wrapmacro # @@ -420,7 +421,7 @@ endif -# C test cases. (Can be run individually using make testcase.ctest.) +# C test cases. (Can be run individually using: make testcase.ctest) C_TEST_CASES += \ arrays \ char_constant \ @@ -459,7 +460,7 @@ unions -# Multi-module C++ test cases . (Can be run individually using make testcase.multicpptest.) +# Multi-module C++ test cases . (Can be run individually using make testcase.multicpptest) MULTI_CPP_TEST_CASES += \ clientdata_prop \ imports \ @@ -468,10 +469,13 @@ template_typedef_import \ multi_import +# Custom tests - tests with additional commandline options +wallkw.cpptest: SWIGOPT += -Wallkw + + NOT_BROKEN_TEST_CASES = $(CPP_TEST_CASES:=.cpptest) \ $(C_TEST_CASES:=.ctest) \ $(MULTI_CPP_TEST_CASES:=.multicpptest) \ - $(CUSTOM_TEST_CASES:=.customtest) \ $(EXTRA_TEST_CASES) BROKEN_TEST_CASES = $(CPP_TEST_BROKEN:=.cpptest) \ @@ -480,7 +484,6 @@ ALL_CLEAN = $(CPP_TEST_CASES:=.clean) \ $(C_TEST_CASES:=.clean) \ $(MULTI_CPP_TEST_CASES:=.clean) \ - $(CUSTOM_TEST_CASES:=.clean) \ $(CPP_TEST_BROKEN:=.clean) \ $(C_TEST_BROKEN:=.clean) Modified: branches/gsoc2009-sploving/Examples/test-suite/csharp/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -15,24 +15,26 @@ csharp_attributes \ csharp_exceptions \ csharp_features \ + csharp_lib_arrays \ csharp_prepost \ csharp_typemaps \ enum_thorough_simple \ enum_thorough_typesafe \ - exception_partial_info - -CUSTOM_TEST_CASES = \ - csharp_lib_arrays \ + exception_partial_info \ intermediary_classname include $(srcdir)/../common.mk # Overridden variables here -SWIGOPT += -namespace $*Namespace $(SWIGOPTSPECIAL) +SWIGOPT += -namespace $*Namespace INTERFACEDIR = ../../ CSHARPFLAGSSPECIAL = +# Custom tests - tests with additional commandline options +intermediary_classname.cpptest: SWIGOPT += -dllimport intermediary_classname +csharp_lib_arrays.cpptest: CSHARPFLAGSSPECIAL = -unsafe + # Rules for the different types of tests %.cpptest: $(setup) @@ -49,12 +51,6 @@ +(cd $* && $(swig_and_compile_multi_cpp)) +$(run_testcase) -# Rules for custom tests -intermediary_classname.customtest: - $(MAKE) intermediary_classname.cpptest SWIGOPTSPECIAL="-dllimport intermediary_classname" -csharp_lib_arrays.customtest: - $(MAKE) csharp_lib_arrays.cpptest CSHARPFLAGSSPECIAL="-unsafe" - # Makes a directory for the testcase if it does not exist setup = \ if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ Modified: branches/gsoc2009-sploving/Examples/test-suite/default_args.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/default_args.i 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/default_args.i 2009-07-04 06:48:39 UTC (rev 11360) @@ -119,6 +119,7 @@ // tests valuewrapper +%feature("compactdefaultargs") MyClass2::set; %inline %{ enum MyType { Val1, Val2 }; @@ -134,6 +135,7 @@ void set(MyClass1 cl1 = Val1) {} // This could have been written : set(MyClass1 cl1 = MyClass1(Val1)) // But it works in C++ since there is a "conversion" constructor in MyClass1. + void set2(MyClass1 cl1 = Val1) {} }; %} Modified: branches/gsoc2009-sploving/Examples/test-suite/guile/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/guile/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/guile/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -9,14 +9,22 @@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ GUILE = @GUILE@ +GUILE_RUNTIME=-runtime -C_TEST_CASES = long_long list_vector pointer_in_out multivalue +C_TEST_CASES = long_long \ + list_vector \ + multivalue \ + pointer_in_out + include $(srcdir)/../common.mk # Overridden variables here # none! +# Custom tests - tests with additional commandline options +%.multicpptest: SWIGOPT += $(GUILE_RUNTIME) + # Rules for the different types of tests %.cpptest: $(setup) @@ -28,19 +36,6 @@ +$(swig_and_compile_c) $(run_testcase) -# override the default in common.mk by adding SWIGOPT += -swig_and_compile_multi_cpp = \ - for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \ - SWIGOPT=" -runtime "; \ - export SWIGOPT; \ - $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile CXXSRCS="$(CXXSRCS)" \ - SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" LIBS='$(LIBS)' \ - INCLUDES="$(INCLUDES)" SWIGOPT="$(SWIGOPT) $$SWIGOPT" NOLINK=true \ - TARGET="$(TARGETPREFIX)$${f}$(TARGETSUFFIX)" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$$f.i" \ - $(LANGUAGE)$(VARIANT)_cpp; \ - SWIGOPT=" -noruntime "; \ - done - %.multicpptest: $(setup) +$(swig_and_compile_multi_cpp) Modified: branches/gsoc2009-sploving/Examples/test-suite/guilescm/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/guilescm/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/guilescm/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -6,12 +6,16 @@ include ../guile/Makefile +# Overridden variables here INCLUDES += -I$(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/guilescm - VARIANT = # Refer to the guile directory for the run scripts SCRIPTPREFIX = ../guile/ +GUILE_RUNTIME= +# Custom tests - tests with additional commandline options +# none! + # Runs the testcase. A testcase is only run if # a file is found which has _runme.scm appended after the testcase name. run_testcase = \ @@ -26,15 +30,6 @@ echo "$(ACTION)ing testcase $* under $(LANGUAGE) (with SCM API)" ; \ fi; -swig_and_compile_multi_cpp = \ - for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \ - $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile CXXSRCS="$(CXXSRCS)" \ - SWIG_LIB="$(SWIG_LIB)" SWIG="$(SWIG)" LIBS='$(LIBS)' \ - INCLUDES="$(INCLUDES)" SWIGOPT="$(SWIGOPT) $$SWIGOPT" NOLINK=true \ - TARGET="$(TARGETPREFIX)$${f}$(TARGETSUFFIX)" INTERFACEDIR="$(INTERFACEDIR)" INTERFACE="$$f.i" \ - $(LANGUAGE)$(VARIANT)_cpp; \ - done - %.externaltest: $(local_setup) +$(swig_and_compile_external) Modified: branches/gsoc2009-sploving/Examples/test-suite/java/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/java/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/java/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -40,6 +40,9 @@ SWIGOPT += -package $* INTERFACEDIR = ../../ +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Copied: branches/gsoc2009-sploving/Examples/test-suite/java/wallkw_runme.java (from rev 11359, trunk/Examples/test-suite/java/wallkw_runme.java) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/java/wallkw_runme.java (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/java/wallkw_runme.java 2009-07-04 06:48:39 UTC (rev 11360) @@ -0,0 +1,25 @@ + +import wallkw.*; + +public class wallkw_runme { + + static { + try { + System.loadLibrary("wallkw"); + } catch (UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); + System.exit(1); + } + } + + public static void main(String argv[]) { + if (!wallkw.c_clone().equals("clone")) + throw new RuntimeException("clone_c keyword fail"); + if (!wallkw._delegate().equals("delegate")) + throw new RuntimeException("delegate keyword fail"); + if (!wallkw._pass().equals("pass")) + throw new RuntimeException("pass keyword fail"); + if (!wallkw.C_alias().equals("alias")) + throw new RuntimeException("alias keyword fail"); + } +} Copied: branches/gsoc2009-sploving/Examples/test-suite/li_reference.i (from rev 11359, trunk/Examples/test-suite/li_reference.i) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/li_reference.i (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/li_reference.i 2009-07-04 06:48:39 UTC (rev 11360) @@ -0,0 +1,52 @@ +%module li_reference + +%include "reference.i" + +%inline %{ + double FrVal; + double ToVal; + void PDouble(double *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RDouble(double &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PFloat(float *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RFloat(float &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PInt(int *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RInt(int &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PShort(short *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RShort(short &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PLong(long *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RLong(long &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PUInt(unsigned int *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RUInt(unsigned int &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PUShort(unsigned short *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RUShort(unsigned short &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PULong(unsigned long *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RULong(unsigned long &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PUChar(unsigned char *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RUChar(unsigned char &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PChar(signed char *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RChar(signed char &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } + void PBool(bool *REFERENCE, int t = 0) + { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } + void RBool(bool &REFERENCE, int t = 0) + { ToVal = REFERENCE; REFERENCE = FrVal + t; } +%} Modified: branches/gsoc2009-sploving/Examples/test-suite/lua/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/lua/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/lua/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -24,6 +24,9 @@ # Overridden variables here LIBS = -L. +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/mzscheme/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/mzscheme/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/mzscheme/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -14,6 +14,9 @@ # Overridden variables here # none! +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/nested_comment.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/nested_comment.i 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/nested_comment.i 2009-07-04 06:48:39 UTC (rev 11360) @@ -27,7 +27,7 @@ struct { /*struct*/ struct { - int b; + int b; /**< v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets */ } c; } d; }; Modified: branches/gsoc2009-sploving/Examples/test-suite/ocaml/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/ocaml/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/ocaml/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -44,6 +44,9 @@ # Overridden variables here # none! +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: echo $@ >> testing Modified: branches/gsoc2009-sploving/Examples/test-suite/octave/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/octave/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/octave/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -34,6 +34,9 @@ # Overridden variables here LIBS = -L. +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -15,7 +15,7 @@ li_cdata \ li_cstring \ li_cdata_carrays \ - byreference \ + li_reference \ C_TEST_CASES += \ li_cdata \ @@ -27,6 +27,9 @@ # Overridden variables here # none! +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Deleted: branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference.i 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference.i 2009-07-04 06:48:39 UTC (rev 11360) @@ -1,52 +0,0 @@ -%module byreference - -%include "reference.i" - -%inline %{ - double FrVal; - double ToVal; - void PDouble(double *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RDouble(double &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PFloat(float *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RFloat(float &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PInt(int *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RInt(int &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PShort(short *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RShort(short &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PLong(long *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RLong(long &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PUInt(unsigned int *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RUInt(unsigned int &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PUShort(unsigned short *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RUShort(unsigned short &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PULong(unsigned long *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RULong(unsigned long &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PUChar(unsigned char *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RUChar(unsigned char &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PChar(signed char *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RChar(signed char &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } - void PBool(bool *REFERENCE, int t = 0) - { ToVal = *REFERENCE; *REFERENCE = FrVal + t; } - void RBool(bool &REFERENCE, int t = 0) - { ToVal = REFERENCE; REFERENCE = FrVal + t; } -%} Deleted: branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference_runme.pl =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference_runme.pl 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/perl5/byreference_runme.pl 2009-07-04 06:48:39 UTC (rev 11360) @@ -1,36 +0,0 @@ -use strict; -use warnings; -use Test::More tests => 68; -BEGIN { use_ok('byreference') } -require_ok('byreference'); - -sub chk { my($type, $call, $v1, $v2) = @_; - $byreference::FrVal = $v1; - my $v = $v2; - eval { $call->(\$v) }; - is($@, '', "$type check"); - is($byreference::ToVal, $v2, "$type out"); - is($v, $v1, "$type in"); -} -chk("double*", \&byreference::PDouble, 12.2, 18.6); -chk("double&", \&byreference::RDouble, 32.5, 64.8); -chk("float*", \&byreference::PFloat, 64.5, 96.0); -chk("float&", \&byreference::RFloat, 98.5, 6.25); -chk("int*", \&byreference::PInt, 1887, 3356); -chk("int&", \&byreference::RInt, 2622, 9867); -chk("short*", \&byreference::PShort, 4752, 3254); -chk("short&", \&byreference::RShort, 1898, 5757); -chk("long*", \&byreference::PLong, 6687, 7132); -chk("long&", \&byreference::RLong, 8346, 4398); -chk("uint*", \&byreference::PUInt, 6853, 5529); -chk("uint&", \&byreference::RUInt, 5483, 7135); -chk("ushort*", \&byreference::PUShort, 9960, 9930); -chk("ushort&", \&byreference::RUShort, 1193, 4178); -chk("ulong*", \&byreference::PULong, 7960, 4788); -chk("ulong&", \&byreference::RULong, 8829, 1603); -chk("uchar*", \&byreference::PUChar, 110, 239); -chk("uchar&", \&byreference::RUChar, 15, 97); -chk("char*", \&byreference::PChar, -7, 118); -chk("char&", \&byreference::RChar, -3, -107); -chk("bool*", \&byreference::PBool, 0, 1); -chk("bool&", \&byreference::RBool, 1, 0); Copied: branches/gsoc2009-sploving/Examples/test-suite/perl5/li_reference_runme.pl (from rev 11359, trunk/Examples/test-suite/perl5/li_reference_runme.pl) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/perl5/li_reference_runme.pl (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/perl5/li_reference_runme.pl 2009-07-04 06:48:39 UTC (rev 11360) @@ -0,0 +1,36 @@ +use strict; +use warnings; +use Test::More tests => 68; +BEGIN { use_ok('li_reference') } +require_ok('li_reference'); + +sub chk { my($type, $call, $v1, $v2) = @_; + $li_reference::FrVal = $v1; + my $v = $v2; + eval { $call->(\$v) }; + is($@, '', "$type check"); + is($li_reference::ToVal, $v2, "$type out"); + is($v, $v1, "$type in"); +} +chk("double*", \&li_reference::PDouble, 12.2, 18.6); +chk("double&", \&li_reference::RDouble, 32.5, 64.8); +chk("float*", \&li_reference::PFloat, 64.5, 96.0); +chk("float&", \&li_reference::RFloat, 98.5, 6.25); +chk("int*", \&li_reference::PInt, 1887, 3356); +chk("int&", \&li_reference::RInt, 2622, 9867); +chk("short*", \&li_reference::PShort, 4752, 3254); +chk("short&", \&li_reference::RShort, 1898, 5757); +chk("long*", \&li_reference::PLong, 6687, 7132); +chk("long&", \&li_reference::RLong, 8346, 4398); +chk("uint*", \&li_reference::PUInt, 6853, 5529); +chk("uint&", \&li_reference::RUInt, 5483, 7135); +chk("ushort*", \&li_reference::PUShort, 9960, 9930); +chk("ushort&", \&li_reference::RUShort, 1193, 4178); +chk("ulong*", \&li_reference::PULong, 7960, 4788); +chk("ulong&", \&li_reference::RULong, 8829, 1603); +chk("uchar*", \&li_reference::PUChar, 110, 239); +chk("uchar&", \&li_reference::RUChar, 15, 97); +chk("char*", \&li_reference::PChar, -7, 118); +chk("char&", \&li_reference::RChar, -3, -107); +chk("bool*", \&li_reference::PBool, 0, 1); +chk("bool&", \&li_reference::RBool, 1, 0); Modified: branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -16,6 +16,9 @@ # Overridden variables here TARGETPREFIX =# Should be php_ for Windows, empty otherwise +# Custom tests - tests with additional commandline options +# none! + # write out tests without a _runme.php missingcpptests: for test in $(CPP_TEST_CASES) ; do test -f $${test}_runme.php || echo $${test}; done Modified: branches/gsoc2009-sploving/Examples/test-suite/pike/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/pike/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/pike/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -14,6 +14,9 @@ # Overridden variables here # none! +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -89,6 +89,9 @@ LIBS = -L. VALGRIND_OPT += --suppressions=pythonswig.supp +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/r/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/r/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/r/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -16,7 +16,11 @@ include $(srcdir)/../common.mk # Overridden variables here +# none! +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -38,12 +38,10 @@ # Overridden variables here SWIGOPT += -w801 -noautorename -features autodoc=4 - -# Rules for the different types of tests - -# make sure -autorename is true for the naming test +# Custom tests - tests with additional commandline options ruby_naming.cpptest: SWIGOPT += -autorename +# Rules for the different types of tests %.cpptest: $(setup) +$(swig_and_compile_cpp) Modified: branches/gsoc2009-sploving/Examples/test-suite/ruby/primitive_types_runme.rb =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/ruby/primitive_types_runme.rb 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/ruby/primitive_types_runme.rb 2009-07-04 06:48:39 UTC (rev 11360) @@ -50,6 +50,9 @@ raise RuntimeError if fail != 1 +# Test a number which won't fit in a 32 bit integer and is represented +# as a FIXNUM by Ruby. +raise RuntimeError if val_double(51767811298) != 51767811298 raise RuntimeError if val_double_2(1.0) != 4.0 raise RuntimeError if val_double_2(1) != 4 Modified: branches/gsoc2009-sploving/Examples/test-suite/tcl/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/tcl/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/tcl/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -23,6 +23,9 @@ # Overridden variables here # none! +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Modified: branches/gsoc2009-sploving/Examples/test-suite/uffi/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/uffi/Makefile.in 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Examples/test-suite/uffi/Makefile.in 2009-07-04 06:48:39 UTC (rev 11360) @@ -11,10 +11,14 @@ include $(srcdir)/../common.mk +# Overridden variables here # no C++ tests for now CPP_TEST_CASES = #C_TEST_CASES += +# Custom tests - tests with additional commandline options +# none! + # Rules for the different types of tests %.cpptest: $(setup) Copied: branches/gsoc2009-sploving/Examples/test-suite/wallkw.i (from rev 11359, trunk/Examples/test-suite/wallkw.i) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/wallkw.i (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/wallkw.i 2009-07-04 06:48:39 UTC (rev 11360) @@ -0,0 +1,16 @@ +%module wallkw + +// test the -Wallkw option + +%warnfilter(SWIGWARN_PARSE_KEYWORD) clone; // 'clone' is a php keyword, renamed as 'c_clone' +%warnfilter(SWIGWARN_PARSE_KEYWORD) delegate; // 'delegate' is a C# keyword, renaming to '_delegate' +%warnfilter(SWIGWARN_PARSE_KEYWORD) pass; // 'pass' is a python keyword, renaming to '_pass' +%warnfilter(SWIGWARN_PARSE_KEYWORD) alias; // 'alias' is a ruby keyword, renaming to 'C_alias' + +%inline %{ +const char * clone() { return "clone"; } +const char * delegate() { return "delegate"; } +const char * pass() { return "pass"; } +const char * alias() { return "alias"; } +%} + Modified: branches/gsoc2009-sploving/Lib/allkw.swg =================================================================== --- branches/gsoc2009-sploving/Lib/allkw.swg 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Lib/allkw.swg 2009-07-04 06:48:39 UTC (rev 11360) @@ -19,7 +19,7 @@ %include <chicken/chickenkw.swg> %include <csharp/csharpkw.swg> %include <java/javakw.swg> -%include <php/php.swg> +%include <php/phpkw.swg> %include <pike/pikekw.swg> %include <python/pythonkw.swg> %include <ocaml/ocamlkw.swg> Modified: branches/gsoc2009-sploving/Lib/python/std_map.i =================================================================== --- branches/gsoc2009-sploving/Lib/python/std_map.i 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Lib/python/std_map.i 2009-07-04 06:48:39 UTC (rev 11360) @@ -23,8 +23,8 @@ if (PyDict_Check(obj)) { SwigVar_PyObject items = PyObject_CallMethod(obj,(char *)"items",NULL); %#if PY_VERSION_HEX >= 0x03000000 - /* In Python 3.x the ".items()" method return a dict_items object */ - items = PySequence_Fast(items, ".items() havn't returned a sequence!"); + /* In Python 3.x the ".items()" method returns a dict_items object */ + items = PySequence_Fast(items, ".items() didn't return a sequence!"); %#endif res = traits_asptr_stdseq<std::map<K,T>, std::pair<K, T> >::asptr(items, val); } else { Modified: branches/gsoc2009-sploving/Lib/ruby/rubyhead.swg =================================================================== --- branches/gsoc2009-sploving/Lib/ruby/rubyhead.swg 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Lib/ruby/rubyhead.swg 2009-07-04 06:48:39 UTC (rev 11360) @@ -10,6 +10,12 @@ #ifdef bind # undef bind #endif +#ifdef close +# undef close +#endif +#ifdef connect +# undef connect +#endif /* Ruby 1.7 defines NUM2LL(), LL2NUM() and ULL2NUM() macros */ Modified: branches/gsoc2009-sploving/Lib/ruby/rubyprimtypes.swg =================================================================== --- branches/gsoc2009-sploving/Lib/ruby/rubyprimtypes.swg 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Lib/ruby/rubyprimtypes.swg 2009-07-04 06:48:39 UTC (rev 11360) @@ -197,7 +197,7 @@ } %fragment(SWIG_AsVal_frag(double),"header",fragment="SWIG_ruby_failed") { -%ruby_aux_method(double, NUM2DBL, (type == T_FLOAT ? NUM2DBL(obj) : (type == T_FIXNUM ? (double) FIX2INT(obj) : rb_big2dbl(obj)))) +%ruby_aux_method(double, NUM2DBL, NUM2DBL(obj)) SWIGINTERN int SWIG_AsVal_dec(double)(VALUE obj, double *val) Modified: branches/gsoc2009-sploving/Lib/tcl/tclinit.swg =================================================================== --- branches/gsoc2009-sploving/Lib/tcl/tclinit.swg 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Lib/tcl/tclinit.swg 2009-07-04 06:48:39 UTC (rev 11360) @@ -22,6 +22,11 @@ } #endif +/* Compatibility version for TCL stubs */ +#ifndef SWIG_TCL_STUBS_VERSION +#define SWIG_TCL_STUBS_VERSION "8.1" +#endif + %} %init %{ @@ -74,10 +79,18 @@ int i; if (interp == 0) return TCL_ERROR; #ifdef USE_TCL_STUBS - if (Tcl_InitStubs(interp, (char*)"8.1", 0) == NULL) { + /* (char*) cast is required to avoid compiler warning/error for Tcl < 8.4. */ + if (Tcl_InitStubs(interp, (char*)SWIG_TCL_STUBS_VERSION, 0) == NULL) { return TCL_ERROR; } #endif +#ifdef USE_TK_STUBS + /* (char*) cast is required to avoid compiler warning/error. */ + if (Tk_InitStubs(interp, (char*)SWIG_TCL_STUBS_VERSION, 0) == NULL) { + return TCL_ERROR; + } +#endif + Tcl_PkgProvide(interp, (char*)SWIG_name, (char*)SWIG_version); #ifdef SWIG_namespace Modified: branches/gsoc2009-sploving/README =================================================================== --- branches/gsoc2009-sploving/README 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/README 2009-07-04 06:48:39 UTC (rev 11360) @@ -20,7 +20,7 @@ Olly Betts (ol...@su...) (PHP) John Lenz (Guile, MzScheme updates, Chicken module, runtime system) Mark Gossage (ma...@go...) (Lua) - Joseph Wang (jo...@gn...) (R) + Joseph Wang (joe...@gm...) (R) Gonzalo Garramuno (gg...@ad...) (Ruby, Ruby's UTL) Xavier Delacour (xav...@gm...) (Octave) Modified: branches/gsoc2009-sploving/Source/CParse/parser.y =================================================================== --- branches/gsoc2009-sploving/Source/CParse/parser.y 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Source/CParse/parser.y 2009-07-04 06:48:39 UTC (rev 11360) @@ -1054,6 +1054,8 @@ case 5: if (*c == '/') state = 0; + else + state = 1; *c = ' '; break; case 6: Modified: branches/gsoc2009-sploving/Source/Modules/csharp.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/csharp.cxx 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Source/Modules/csharp.cxx 2009-07-04 06:48:39 UTC (rev 11360) @@ -3332,7 +3332,8 @@ Delete(jretval_decl); } } else { - Swig_warning(WARN_CSHARP_TYPEMAP_CTYPE_UNDEF, input_file, line_number, "No ctype typemap defined for %s\n", SwigType_str(returntype, 0)); + Swig_warning(WARN_CSHARP_TYPEMAP_CTYPE_UNDEF, input_file, line_number, "No ctype typemap defined for %s for use in %s::%s (skipping director method)\n", + SwigType_str(returntype, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); output_director = false; } @@ -3475,11 +3476,13 @@ Swig_warning(WARN_CSHARP_TYPEMAP_CSWTYPE_UNDEF, input_file, line_number, "No cstype typemap defined for %s\n", SwigType_str(pt, 0)); } } else { - Swig_warning(WARN_CSHARP_TYPEMAP_CSDIRECTORIN_UNDEF, input_file, line_number, "No csdirectorin typemap defined for %s\n", SwigType_str(pt, 0)); + Swig_warning(WARN_CSHARP_TYPEMAP_CSDIRECTORIN_UNDEF, input_file, line_number, "No csdirectorin typemap defined for %s for use in %s::%s (skipping director method)\n", + SwigType_str(pt, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); output_director = false; } } else { - Swig_warning(WARN_CSHARP_TYPEMAP_CSTYPE_UNDEF, input_file, line_number, "No imtype typemap defined for %s\n", SwigType_str(pt, 0)); + Swig_warning(WARN_CSHARP_TYPEMAP_CSTYPE_UNDEF, input_file, line_number, "No imtype typemap defined for %s for use in %s::%s (skipping director method)\n", + SwigType_str(pt, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); output_director = false; } @@ -3489,11 +3492,13 @@ } else { if (!desc_tm) { Swig_warning(WARN_CSHARP_TYPEMAP_CSDIRECTORIN_UNDEF, input_file, line_number, - "No or improper directorin typemap defined for %s\n", SwigType_str(c_param_type, 0)); + "No or improper directorin typemap defined for %s for use in %s::%s (skipping director method)\n", + SwigType_str(c_param_type, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); p = nextSibling(p); } else if (!tm) { Swig_warning(WARN_CSHARP_TYPEMAP_CSDIRECTORIN_UNDEF, input_file, line_number, - "No or improper directorin typemap defined for argument %s\n", SwigType_str(pt, 0)); + "No or improper directorin typemap defined for argument %s for use in %s::%s (skipping director method)\n", + SwigType_str(pt, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); p = nextSibling(p); } @@ -3502,7 +3507,8 @@ Delete(tp); } else { - Swig_warning(WARN_CSHARP_TYPEMAP_CTYPE_UNDEF, input_file, line_number, "No ctype typemap defined for %s\n", SwigType_str(pt, 0)); + Swig_warning(WARN_CSHARP_TYPEMAP_CTYPE_UNDEF, input_file, line_number, "No ctype typemap defined for %s for use in %s::%s (skipping director method)\n", + SwigType_str(pt, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); output_director = false; p = nextSibling(p); } @@ -3602,8 +3608,8 @@ Printf(w->code, "%s\n", tm); } else { Swig_warning(WARN_TYPEMAP_DIRECTOROUT_UNDEF, input_file, line_number, - "Unable to use return type %s in director method %s::%s (skipping method).\n", SwigType_str(returntype, 0), - SwigType_namestr(c_classname), SwigType_namestr(name)); + "Unable to use return type %s used in %s::%s (skipping director method)\n", + SwigType_str(returntype, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); output_director = false; } Modified: branches/gsoc2009-sploving/Source/Modules/java.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/java.cxx 2009-07-03 23:32:14 UTC (rev 11359) +++ branches/gsoc2009-sploving/Source/Modules/java.cxx 2009-07-04 06:48:39 UTC (rev 11360) @@ -3387,7 +3387,8 @@ Append(classret_desc, jnidesc_canon); Delete(jnidesc_canon); } else { - Swig_warning(WARN_TYPEMAP_DIRECTORIN_UNDEF, input_file, line_number, "No or improper directorin typemap defined for %s\n", SwigType_str(returntype, 0)); + Swig_warning(WARN_TYPEMAP_DIRECTORIN_UNDEF, input_file, line_number, "No or improper directorin typemap defined for %s for use in %s::%s (skipping director method)\n", + SwigType_str(returntype, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); output_director = false; } @@ -3418,13 +3419,15 @@ Delete(jnidesc_canon); } else { Swig_warning(WARN_TYPEMAP_DIRECTORIN_UNDEF, input_file, line_number, - "No or improper directorin typemap defined for %s\n", SwigType_str(c_ret_type, 0)); + "No or improper directorin typemap defined for %s for use in %s::%s (skipping director method)\n", + SwigType_str(c_ret_type, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); output_director = false; } Delete(tp); } else { - Swig_warning(WARN_JAVA_TYPEMAP_JNI_UNDEF, input_file, line_number, "No jni typemap defined for %s\n", SwigType_str(returntype, 0)); + Swig_warning(WARN_JAVA_TYPEMAP_JNI_UNDEF, input_file, line_number, "No jni typemap defined for %s for use in %s::%s (skipping director method)\n", + SwigType_str(returntype, 0), SwigType_namestr(c_classname), SwigType_namestr(name)); output_director = false; } @@ -3508,8 +3511,8 @@ ... [truncated message content] |
From: <spl...@us...> - 2009-07-16 08:46:09
|
Revision: 11404 http://swig.svn.sourceforge.net/swig/?rev=11404&view=rev Author: sploving Date: 2009-07-16 08:45:50 +0000 (Thu, 16 Jul 2009) Log Message: ----------- Some change about makefile and typemaps as a littlet change of Scilab API Modified Paths: -------------- branches/gsoc2009-sploving/Examples/scilab/constants/makefile branches/gsoc2009-sploving/Examples/scilab/contract/makefile branches/gsoc2009-sploving/Examples/scilab/enum/makefile branches/gsoc2009-sploving/Examples/scilab/pointer/makefile branches/gsoc2009-sploving/Examples/scilab/simple/makefile branches/gsoc2009-sploving/Examples/scilab/variables/makefile branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Modified: branches/gsoc2009-sploving/Examples/scilab/constants/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/makefile 2009-07-16 04:26:11 UTC (rev 11403) +++ branches/gsoc2009-sploving/Examples/scilab/constants/makefile 2009-07-16 08:45:50 UTC (rev 11404) @@ -7,9 +7,10 @@ all:: $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + scilab -nwni < runme.sci clean:: $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c + rm -f *.sce *.so lib*lib.c *_wrap.c check: all Modified: branches/gsoc2009-sploving/Examples/scilab/contract/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/makefile 2009-07-16 04:26:11 UTC (rev 11403) +++ branches/gsoc2009-sploving/Examples/scilab/contract/makefile 2009-07-16 08:45:50 UTC (rev 11404) @@ -7,9 +7,10 @@ all:: $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + scilab -nwni < runme.sci clean:: $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c + rm -f *.sce *.so lib*lib.c *_wrap.c check: all Modified: branches/gsoc2009-sploving/Examples/scilab/enum/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/makefile 2009-07-16 04:26:11 UTC (rev 11403) +++ branches/gsoc2009-sploving/Examples/scilab/enum/makefile 2009-07-16 08:45:50 UTC (rev 11404) @@ -7,9 +7,10 @@ all:: $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + scilab -nwni < runme.sci clean:: $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c + rm -f *.sce *.so lib*lib.c *_wrap.c check: all Modified: branches/gsoc2009-sploving/Examples/scilab/pointer/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/makefile 2009-07-16 04:26:11 UTC (rev 11403) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/makefile 2009-07-16 08:45:50 UTC (rev 11404) @@ -7,9 +7,10 @@ all:: $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + scilab -nwni < runme.sci clean:: $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c + rm -f *.sce *.so lib*lib.c *_wrap.c check: all Modified: branches/gsoc2009-sploving/Examples/scilab/simple/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/makefile 2009-07-16 04:26:11 UTC (rev 11403) +++ branches/gsoc2009-sploving/Examples/scilab/simple/makefile 2009-07-16 08:45:50 UTC (rev 11404) @@ -7,9 +7,10 @@ all:: $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + scilab -nwni < runme.sci clean:: $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c + rm -f *.sce *.so lib*lib.c *_wrap.c check: all Modified: branches/gsoc2009-sploving/Examples/scilab/variables/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/makefile 2009-07-16 04:26:11 UTC (rev 11403) +++ branches/gsoc2009-sploving/Examples/scilab/variables/makefile 2009-07-16 08:45:50 UTC (rev 11404) @@ -7,9 +7,10 @@ all:: $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + scilab -nwni < runme.sci clean:: $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c + rm -f *.sce *.so lib*lib.c *_wrap.c check: all Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-16 04:26:11 UTC (rev 11403) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-16 08:45:50 UTC (rev 11404) @@ -337,35 +337,35 @@ * ----------------------------------------------------------------------------- */ /* Basic C types */ -%typemap(out) signed char (int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) signed char (int iRowsOut,int iColsOut) { char temp; temp=(char)($result); iRowsOut=1; iColsOut=1; - createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum)=iVarOut; } -%typemap(out) short (int iRowsOut,int iColsOut,int* _piAddress), - unsigned char (int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) short (int iRowsOut,int iColsOut), + unsigned char (int iRowsOut,int iColsOut) { short temp; temp=(short)($result); iRowsOut=1; iColsOut=1; - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum)=iVarOut; } -%typemap(out) int (int iRowsOut,int iColsOut,int* _piAddress), - unsigned int (int iRowsOut,int iColsOut,int* _piAddress), - unsigned short (int iRowsOut,int iColsOut,int* _piAddress), - unsigned long (int iRowsOut,int iColsOut,int* _piAddress), - long (int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) int (int iRowsOut,int iColsOut), + unsigned int (int iRowsOut,int iColsOut), + unsigned short (int iRowsOut,int iColsOut), + unsigned long (int iRowsOut,int iColsOut), + long (int iRowsOut,int iColsOut) { int temp; temp=(int)($result); iRowsOut=1; iColsOut=1; - createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum)=iVarOut; } @@ -392,35 +392,35 @@ } /* Pointers */ -%typemap(out) signed char *(int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) signed char *(int iRowsOut,int iColsOut) { char *temp; temp=(char *)($result); iRowsOut=1; iColsOut=1; - createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, temp); LhsVar(iOutNum)=iVarOut; } -%typemap(out) short *(int iRowsOut,int iColsOut,int* _piAddress), - unsigned char *(int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) short *(int iRowsOut,int iColsOut), + unsigned char *(int iRowsOut,int iColsOut) { short *temp; temp=(short *)($result); iRowsOut=1; iColsOut=1; - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, temp); LhsVar(iOutNum)=iVarOut; } -%typemap(out) int *(int iRowsOut,int iColsOut,int* _piAddress), - unsigned int *(int iRowsOut,int iColsOut,int* _piAddress), - unsigned short *(int iRowsOut,int iColsOut,int* _piAddress), - unsigned long *(int iRowsOut,int iColsOut,int* _piAddress), - long *(int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(out) int *(int iRowsOut,int iColsOut), + unsigned int *(int iRowsOut,int iColsOut), + unsigned short *(int iRowsOut,int iColsOut), + unsigned long *(int iRowsOut,int iColsOut), + long *(int iRowsOut,int iColsOut) { int *temp; temp=(int *)($result); iRowsOut=1; iColsOut=1; - createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, temp, &_piAddress); + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, temp); LhsVar(iOutNum)=iVarOut; } @@ -549,22 +549,19 @@ * ----------------------------------------------------------------------------- */ /* Basic C types */ %typemap(varout,noblock=1) signed char { - int* _piAddress; - createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &$result, &_piAddress); + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum)=iVarOut; } %typemap(varout,noblock=1) short { - int* _piAddress; - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &$result, &_piAddress); + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum)=iVarOut; } %typemap(varout,noblock=1) unsigned char { - int* _piAddress; short temp; temp=$result; - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp, &_piAddress); + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum)=iVarOut; } @@ -573,8 +570,7 @@ unsigned short, unsigned long, long { - int* _piAddress; - createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &$result, &_piAddress); + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum)=iVarOut; } Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-07-16 04:26:11 UTC (rev 11403) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-07-16 08:45:50 UTC (rev 11404) @@ -161,7 +161,7 @@ virtual int functionWrapper(Node *n) { - hasfunction_flag=true; + hasfunction_flag = true; /* A new wrapper function object */ Wrapper *f = NewWrapper(); @@ -299,19 +299,19 @@ /* Insert the code checking for the number of input and output */ int flag; - if(out_required==0) { - out_required=1; - flag=0; + if(out_required == 0) { + out_required = 1; + flag = 0; } else { - flag=1; + flag = 1; } - Printf(f->def,"CheckRhs(%d,%d);\n",num_required,num_required); - Printf(f->def,"CheckLhs(%d,%d);\n",out_required,out_required); + Printf(f->def, "CheckRhs(%d,%d);\n",num_required,num_required); + Printf(f->def, "CheckLhs(%d,%d);\n",out_required,out_required); /* Insert the order of output parameters*/ if(flag) - Printf(f->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); + Printf(f->def, "\nint iOutNum=1;\nint iVarOut=Rhs+1;"); /* Finish the the code for the function */ Printf(f->code, "return 0;\n"); @@ -322,7 +322,7 @@ /* Dump the wrapper function */ Wrapper_print(f, f_wrappers); DelWrapper(f); - Printf(f_builder_code, "\"%s\",\"%s\";",iname,wname); + Printf(f_builder_code, "\"%s\",\"%s\";", iname, wname); Delete(overname); Delete(wname); @@ -337,7 +337,7 @@ virtual int variableWrapper(Node *n) { - hasfunction_flag=true; + hasfunction_flag = true; /* Get the useful information from the node */ String *name = Getattr(n, "name"); @@ -347,33 +347,33 @@ if (!addSymbol(iname, n)) return SWIG_ERROR; - String *rowname=NewString(""); - String *colname=NewString(""); - String *iscomplexname=NewString(""); - Printf(rowname,"iRows_%s",iname); - Printf(colname,"iCols_%s",iname); - Printf(iscomplexname,"isComplex_%s",iname); + String *rowname = NewString(""); + String *colname = NewString(""); + String *iscomplexname = NewString(""); + Printf(rowname, "iRows_%s", iname); + Printf(colname, "iCols_%s", iname); + Printf(iscomplexname, "isComplex_%s", iname); /* two wrapper function to get and set the variable */ String *tm; - String *globalVar=NewString(""); + String *globalVar = NewString(""); Wrapper *getf = NewWrapper(); Wrapper *setf = NewWrapper(); String *getname = Swig_name_get(iname); String *setname = Swig_name_set(iname); - Printf(globalVar, "int %s=0;\n",rowname); - Printf(globalVar, "int %s=0;\n",colname); - if(!Strcmp(t,"p.double")) - Printf(globalVar, "int %s=0;\n\n",iscomplexname); + Printf(globalVar, "int %s=0;\n", rowname); + Printf(globalVar, "int %s=0;\n", colname); + if(!Strcmp(t, "p.double")) + Printf(globalVar, "int %s=0;\n\n", iscomplexname); else - Printf(globalVar,"\n"); + Printf(globalVar, "\n"); Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {\n", NIL); /* Check the number of input and output */ - Printf(setf->def,"CheckRhs(1,1);\n"); - Printf(setf->def,"CheckLhs(1,1);\n"); + Printf(setf->def, "CheckRhs(1,1);\n"); + Printf(setf->def, "CheckLhs(1,1);\n"); /* add the local variable */ Wrapper_add_local(setf, "piAddrVar", "int *piAddrVar"); @@ -383,9 +383,9 @@ Setattr(n, "wrap:name", setname); if ((tm = Swig_typemap_lookup("varin", n, name, 0))) { Replaceall(tm, "$argnum", "1"); - Replaceall(tm,"iRows",rowname); - Replaceall(tm,"iCols",colname); - Replaceall(tm,"isComplex",iscomplexname); + Replaceall(tm, "iRows", rowname); + Replaceall(tm, "iCols", colname); + Replaceall(tm, "isComplex", iscomplexname); emit_action_code(n, setf->code, tm); Delete(tm); } else { @@ -396,7 +396,7 @@ } Append(setf->code, "}\n"); Wrapper_print(setf, f_wrappers); - Printf(f_builder_code, "\"%s\",\"%s\";",setname,setname); + Printf(f_builder_code, "\"%s\",\"%s\";", setname, setname); /* deal with the get function */ Setattr(n, "wrap:name", getname); @@ -404,17 +404,17 @@ Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len){\n", NIL); /* Check the number of input and output */ - Printf(getf->def,"CheckRhs(0,0);\n"); - Printf(getf->def,"CheckLhs(1,1);\n"); + Printf(getf->def, "CheckRhs(0,0);\n"); + Printf(getf->def, "CheckLhs(1,1);\n"); /* Insert the order of output parameters*/ - Printf(getf->def,"\nint iOutNum=1;\nint iVarOut=Rhs+1;"); + Printf(getf->def, "\nint iOutNum=1;\nint iVarOut=Rhs+1;"); if ((tm = Swig_typemap_lookup("varout", n, name, 0))) { Replaceall(tm, "$result", name); - Replaceall(tm,"iRowsOut",rowname); - Replaceall(tm,"iColsOut",colname); - Replaceall(tm,"isComplex",iscomplexname); + Replaceall(tm, "iRowsOut", rowname); + Replaceall(tm, "iColsOut", colname); + Replaceall(tm, "isComplex", iscomplexname); addfail = emit_action_code(n, getf->code, tm); Delete(tm); } else { @@ -424,8 +424,16 @@ /*Dump the wrapper function */ Append(getf->code, "}\n"); Wrapper_print(getf, f_wrappers); - Printf(f_header,"%s",globalVar); - Printf(f_builder_code, "\"%s\",\"%s\";",getname,getname); + Printf(f_header,"%s", globalVar); + Printf(f_builder_code, "\"%s\",\"%s\";", getname, getname); + + Delete(rowname); + Delete(colname); + Delete(iscomplexname); + Delete(globalVar); + DelWrapper(setf); + DelWrapper(getf); + return SWIG_OK; } @@ -437,40 +445,42 @@ virtual int constantWrapper(Node *n) { /* set the flag so to generate the example.sce */ - hasconstant_flag=true; + hasconstant_flag = true; /* Get the useful information from the node */ String *iname = Getattr(n, "sym:name"); SwigType *type = Getattr(n, "type"); String *rawval = Getattr(n, "rawval"); String *value = rawval ? rawval : Getattr(n, "value"); - String *tempvalue=NewString(""); + String *tempvalue = NewString(""); /* set the value format to be the scilab format */ - if(!Strcmp(type,"char")){ - value=Getattr(n,"rawvalue"); - char *temp=(Char(value)); - tempvalue=NewString("ascii"); - Printf(tempvalue,"(%i)",(int)*temp); - value=Copy(tempvalue); + if(!Strcmp(type, "char")){ + value = Getattr(n, "rawvalue"); + char *temp = (Char(value)); + tempvalue = NewString("ascii"); + Printf(tempvalue, "(%i)", (int)*temp); + value = Copy(tempvalue); + Delete(tempvalue); } else{ - if(!Strcmp(type,"p.char")){ - char *temp=(Char(value)); - int len=strlen(temp); - for(int i=0;i<len;++i){ - if(temp[i]=='\\'){ - temp[i]='"'; + if(!Strcmp(type, "p.char")){ + char *temp = (Char(value)); + int len = strlen(temp); + for(int i=0; i<len; ++i){ + if(temp[i] == '\\'){ + temp[i] = '"'; ++i; } } - Printf(tempvalue,"%s",temp); - value=Copy(tempvalue); + Printf(tempvalue, "%s",temp); + value = Copy(tempvalue); } + Delete(tempvalue); } /* write into the code string */ - Printf(f_example_code, "example.%s = %s\n",iname,value); + Printf(f_example_code, "example.%s = %s\n", iname, value); return SWIG_OK; } @@ -482,7 +492,7 @@ virtual int enumDeclaration(Node *n) { /* set the flag so to generate the example.sce */ - hasconstant_flag=true; + hasconstant_flag = true; return Language::enumDeclaration(n); } @@ -496,34 +506,34 @@ String *iname = Getattr(n, "sym:name"); /* get the name of the enum name */ - String *parentName=Getattr(parentNode(n), "sym:name"); + String *parentName = Getattr(parentNode(n), "sym:name"); /* set the name to be the enum.enumvalue format */ - String *temp=Copy(parentName); - Printf(temp,".%s",iname); - Setattr(n,"sym:name",temp); + String *temp = Copy(parentName); + Printf(temp, ".%s", iname); + Setattr(n, "sym:name", temp); /* set the value attribute to be the integer */ String *value; - String *enumvalue=Getattr(n,"enumvalue"); + String *enumvalue = Getattr(n, "enumvalue"); if(enumvalue) { - Setattr(n,"value",enumvalue); + Setattr(n, "value", enumvalue); } else { - if(n!=firstChild(parentNode(n))) { - enumvalue=Getattr(n,"enumvalueex"); - value=Copy(parentName); - Printf(value,".%s",enumvalue); - Setattr(n,"value",value); + if(n != firstChild(parentNode(n))) { + enumvalue = Getattr(n, "enumvalueex"); + value = Copy(parentName); + Printf(value, ".%s", enumvalue); + Setattr(n, "value", value); } else { - Setattr(n,"value",Getattr(n,"enumvalueex")); + Setattr(n, "value", Getattr(n, "enumvalueex")); } } - value=Getattr(n,"value"); + value = Getattr(n, "value"); /* write into the code string */ - Printf(f_example_code, "%s.%s=%s;\n",parentName,iname,value); + Printf(f_example_code, "%s.%s=%s;\n", parentName, iname, value); return SWIG_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-07-17 16:21:57
|
Revision: 11415 http://swig.svn.sourceforge.net/swig/?rev=11415&view=rev Author: sploving Date: 2009-07-17 16:21:54 +0000 (Fri, 17 Jul 2009) Log Message: ----------- added some pointer support and fixed style problem Modified Paths: -------------- branches/gsoc2009-sploving/Examples/Makefile.in branches/gsoc2009-sploving/Examples/octave/pointer/Makefile branches/gsoc2009-sploving/Examples/octave/pointer/example.i branches/gsoc2009-sploving/Examples/python/pointer/Makefile branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci branches/gsoc2009-sploving/Examples/scilab/variables/example.c branches/gsoc2009-sploving/Examples/scilab/variables/example.i branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Lib/scilab/typemaps.i Modified: branches/gsoc2009-sploving/Examples/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/Makefile.in 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/Makefile.in 2009-07-17 16:21:54 UTC (rev 11415) @@ -1152,8 +1152,14 @@ scilab: $(SRCS) $(SWIG) -scilab $(SWIGOPT) $(INTERFACEPATH) + +# ----------------------------------------------------------------- +# Running a Scilab example +# ----------------------------------------------------------------- + +scilab_run: + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH SCILABPATH=$(srcdir):$$SCILABPATH $(SCILAB) -nwni < runme.sci - # ----------------------------------------------------------------- # Cleaning the scilab examples # ----------------------------------------------------------------- Modified: branches/gsoc2009-sploving/Examples/octave/pointer/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/octave/pointer/Makefile 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/octave/pointer/Makefile 2009-07-17 16:21:54 UTC (rev 11415) @@ -1,6 +1,6 @@ TOP = ../.. SWIG = $(TOP)/../preinst-swig -SRCS = example.c +SRCS = example.i TARGET = example INTERFACE = example.i Modified: branches/gsoc2009-sploving/Examples/octave/pointer/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/octave/pointer/example.i 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/octave/pointer/example.i 2009-07-17 16:21:54 UTC (rev 11415) @@ -1,30 +1,6 @@ /* File : example.i */ %module example +FILE *fopen(char *filename, char *mode); +int fputs(char* , FILE *); +int fclose(FILE *); -%{ -extern void add(int *, int *, int *); -extern void sub(int *, int *, int *); -extern int divide(int, int, int *); -%} - -/* This example illustrates a couple of different techniques - for manipulating C pointers */ - -/* First we'll use the pointer library */ -extern void add(int *x, int *y, int *result); -%include cpointer.i -%pointer_functions(int, intp); - -/* Next we'll use some typemaps */ - -%include typemaps.i -extern void sub(int *INPUT, int *INPUT, int *OUTPUT); - -/* Next we'll use typemaps and the %apply directive */ - -%apply int *OUTPUT { int *r }; -extern int divide(int n, int d, int *r); - - - - Modified: branches/gsoc2009-sploving/Examples/python/pointer/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/python/pointer/Makefile 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/python/pointer/Makefile 2009-07-17 16:21:54 UTC (rev 11415) @@ -1,6 +1,6 @@ TOP = ../.. SWIG = $(TOP)/../preinst-swig -SRCS = example.c +SRCS = example.i TARGET = example INTERFACE = example.i Modified: branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-07-17 16:21:54 UTC (rev 11415) @@ -20,3 +20,5 @@ catch printf("FOO is not defined (good)\n"); end + +exit Modified: branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci 2009-07-17 16:21:54 UTC (rev 11415) @@ -32,3 +32,7 @@ g=gcd(x,y); printf("The gcd of %d and %d is %d\n",x,y,g); +exit + + + Modified: branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-07-17 16:21:54 UTC (rev 11415) @@ -20,3 +20,5 @@ enum_test(color.GREEN); enum_test(1234); +exit + Modified: branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-07-17 16:21:54 UTC (rev 11415) @@ -18,3 +18,5 @@ [q,r] = divide(42,37); printf(" 42/37 = %d remainder %d\n",q,r); +exit + Modified: branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-07-17 16:21:54 UTC (rev 11415) @@ -22,3 +22,5 @@ // See if the change took effect Foo_get() +exit + Modified: branches/gsoc2009-sploving/Examples/scilab/variables/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-07-17 16:21:54 UTC (rev 11415) @@ -23,11 +23,14 @@ float fvar = 0; double dvar = 0; char *strvar=0; +char name[5] = "Dave"; double *Foo1; double *Foo2; +int *pivar; +short *psvar; +char **foo; - /* A debugging function to print out their values */ void print_vars() { @@ -43,6 +46,7 @@ printf("dvar = %g\n", dvar); printf("cvar = %c\n", cvar); printf("strvar = %s\n",strvar); + printf("name = %c%c%c%c%c\n", name[0],name[1],name[2],name[3],name[4]); } Modified: branches/gsoc2009-sploving/Examples/scilab/variables/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.i 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.i 2009-07-17 16:21:54 UTC (rev 11415) @@ -17,8 +17,12 @@ extern float fvar; extern double dvar; extern char *strvar; + extern char name[256]; extern double *Foo1; extern double *Foo2; + extern int *pivar; + extern short *psvar; + extern char **foo; %} Modified: branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-07-17 16:21:54 UTC (rev 11415) @@ -18,8 +18,16 @@ fvar_set (3.14159); dvar_set (2.1828); strvar_set("Hello World"); +name_set ("Bill"); Foo1_set([1,2,3;4,5,6]); Foo2_set([1+2*%i,2+3*%i;3+4*%i,7+8*%i]); +pivar_set(int32([ 1 2 3 4 5; + 6 7 8 9 10; + 11 12 13 14 15])); +psvar_set(int16([ 1 2 3 4 5; + 6 7 8 9 10; + 11 12 13 14 15])); +foo_set(["sample", "strings", "manipulation"; "with","gateway","API"]); // Now print out the values of the variables @@ -37,10 +45,16 @@ printf("dvar = %f\n", dvar_get()); printf("cvar = %s\n", cvar_get()); printf("strvar = %s\n", strvar_get()); +printf("name = %s\n", name_get()); Foo1_get() Foo2_get() +pivar_get() +psvar_get() +foo_get() printf("\nVariables (values printed from C)\n"); -print_vars(); +print_vars() +exit + Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-17 16:21:54 UTC (rev 11415) @@ -26,7 +26,7 @@ unsigned long (int *piAddrVar, int iRows, int iCols), float (int *piAddrVar, int iRows, int iCols), double (int *piAddrVar, int iRows, int iCols) { - double* _piData; + double *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -34,11 +34,11 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - $1=($1_ltype)*_piData; + $1 = ($1_ltype)*_piData; } %typemap(in) char (int *piAddrVar, int iRows, int iCols) { - char* _pstStrings; + char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -47,13 +47,13 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); - $1=($1_ltype)*_pstStrings; + $1 = ($1_ltype)*_pstStrings; } /* Pointers */ %typemap(in) signed char *(int *piAddrVar, int iRows, int iCols) { - char* _piData; + char *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -62,12 +62,12 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); - $1=($1_ltype)_piData; + $1 = ($1_ltype)_piData; } %typemap(in) short *(int *piAddrVar, int iRows, int iCols), unsigned char *(int *piAddrVar, int iRows, int iCols) { - short* _piData; + short *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -76,7 +76,7 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); - $1=($1_ltype)_piData; + $1 = ($1_ltype)_piData; } %typemap(in) unsigned short *(int *piAddrVar, int iRows, int iCols), @@ -84,7 +84,7 @@ unsigned int *(int *piAddrVar, int iRows, int iCols), long *(int *piAddrVar, int iRows, int iCols), unsigned long *(int *piAddrVar, int iRows, int iCols) { - int* _piData; + int *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -93,12 +93,12 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); - $1=($1_ltype)_piData; + $1 = ($1_ltype)_piData; } %typemap(in) double *(int *piAddrVar, int iRows, int iCols), float *(int *piAddrVar, int iRows, int iCols) { - double* _piData; + double *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -107,11 +107,11 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - $1=($1_ltype)_piData; + $1 = ($1_ltype)_piData; } %typemap(in) char *(int *piAddrVar, int iRows, int iCols){ - char* _pstStrings; + char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -120,11 +120,11 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); - $1=strdup(_pstStrings); + $1 = strdup(_pstStrings); } -%typemap(in) signed char [ANY](int *piAddrVar, int iRows, int iCols) { - char* _piData; +%typemap(in) signed char [ANY] (int *piAddrVar, int iRows, int iCols) { + char *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -133,18 +133,18 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; + for(index = 0; index < iRows * iCols; index++) { + $1[index] = ($*1_ltype)_piData[index]; } } -%typemap(in) short [ANY](int *piAddrVar, int iRows, int iCols), - unsigned char [ANY](int *piAddrVar, int iRows, int iCols) { - short* _piData; +%typemap(in) short [ANY] (int *piAddrVar, int iRows, int iCols), + unsigned char [ANY] (int *piAddrVar, int iRows, int iCols) { + short *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -153,21 +153,21 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; + $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); + for(index = 0; index < iRows * iCols; index++) { + $1[index] = ($*1_ltype)_piData[index]; } } -%typemap(in) unsigned short [ANY](int *piAddrVar, int iRows, int iCols), - int [ANY](int *piAddrVar, int iRows, int iCols), - unsigned int [ANY](int *piAddrVar, int iRows, int iCols), - long [ANY](int *piAddrVar, int iRows, int iCols), - unsigned long [ANY](int *piAddrVar, int iRows, int iCols) { - int* _piData; +%typemap(in) unsigned short [ANY] (int *piAddrVar, int iRows, int iCols), + int [ANY] (int *piAddrVar, int iRows, int iCols), + unsigned int [ANY] (int *piAddrVar, int iRows, int iCols), + long [ANY] (int *piAddrVar, int iRows, int iCols), + unsigned long [ANY] (int *piAddrVar, int iRows, int iCols) { + int *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -176,18 +176,18 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; + $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); + for(index = 0; index < iRows * iCols; index++) { + $1[index] = ($*1_ltype)_piData[index]; } } -%typemap(in) double [ANY](int *piAddrVar, int iRows, int iCols), - float [ANY](int *piAddrVar, int iRows, int iCols){ - double* _piData; +%typemap(in) double [ANY] (int *piAddrVar, int iRows, int iCols), + float [ANY] (int *piAddrVar, int iRows, int iCols){ + double *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -196,19 +196,19 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; + $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); + for(index = 0; index < iRows * iCols; index++){ + $1[index] = ($*1_ltype)_piData[index]; } } -%typemap(in) char [ANY](int *piAddrVar, int iRows, int iCols){ - char* _pstStrings; +%typemap(in) char [ANY] (int *piAddrVar, int iRows, int iCols){ + char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -217,13 +217,13 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); - $1=strdup(_pstStrings); + $1 = strdup(_pstStrings); } /* Arrays */ -%typemap(in) signed char [ANY][ANY](int *piAddrVar, int iRows, int iCols) { - char* _piData; +%typemap(in) signed char [ANY][ANY] (int *piAddrVar, int iRows, int iCols) { + char *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -231,22 +231,22 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(iRows*sizeof($*1_ltype)); + $1 = ($1_ltype)malloc(iRows * sizeof($*1_ltype)); size_t ii; - for(ii=0;ii<iRows;ii++){ - $1[ii]=($*1_ltype)malloc(iCols*sizeof($1_basetype)); + for(ii = 0; ii < iRows; ii++){ + $1[ii] = ($*1_ltype)malloc(iCols * sizeof($1_basetype)); size_t jj; - for(jj=0;jj<iCols;jj++) - $1[ii][jj]=($1_basetype)_piData[jj*iRows+ii]; + for(jj=0; jj < iCols; jj++) + $1[ii][jj] = ($1_basetype)_piData[jj * iRows+ii]; } } -%typemap(in) short [ANY][ANY](int *piAddrVar, int iRows, int iCols), - unsigned char [ANY][ANY](int *piAddrVar, int iRows, int iCols) { - short* _piData; +%typemap(in) short [ANY][ANY] (int *piAddrVar, int iRows, int iCols), + unsigned char [ANY][ANY] (int *piAddrVar, int iRows, int iCols) { + short *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -254,25 +254,25 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(iRows*sizeof($*1_ltype)); + $1 = ($1_ltype)malloc(iRows*sizeof($*1_ltype)); size_t ii; - for(ii=0;ii<iRows;ii++){ - $1[ii]=($*1_ltype)malloc(iCols*sizeof($1_basetype)); + for(ii = 0; ii < iRows; ii++){ + $1[ii] = ($*1_ltype)malloc(iCols * sizeof($1_basetype)); size_t jj; - for(jj=0;jj<iCols;jj++) - $1[ii][jj]=($1_basetype)_piData[jj*iRows+ii]; + for(jj = 0; jj < iCols; jj++) + $1[ii][jj] = ($1_basetype)_piData[jj * iRows+ii]; } } -%typemap(in) unsigned short [ANY][ANY](int *piAddrVar, int iRows, int iCols), - int [ANY][ANY](int *piAddrVar, int iRows, int iCols), - unsigned int [ANY][ANY](int *piAddrVar, int iRows, int iCols), - long [ANY][ANY](int *piAddrVar, int iRows, int iCols), - unsigned long [ANY][ANY](int *piAddrVar, int iRows, int iCols){ - int* _piData; +%typemap(in) unsigned short [ANY][ANY] (int *piAddrVar, int iRows, int iCols), + int [ANY][ANY] (int *piAddrVar, int iRows, int iCols), + unsigned int [ANY][ANY] (int *piAddrVar, int iRows, int iCols), + long [ANY][ANY] (int *piAddrVar, int iRows, int iCols), + unsigned long [ANY][ANY] (int *piAddrVar, int iRows, int iCols){ + int *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -280,23 +280,23 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(iRows*sizeof($*1_ltype)); + $1 = ($1_ltype)malloc(iRows*sizeof($*1_ltype)); size_t ii; - for(ii=0;ii<iRows;ii++){ - $1[ii]=($*1_ltype)malloc(iCols*sizeof($1_basetype)); + for(ii = 0; ii < iRows;ii++){ + $1[ii] = ($*1_ltype)malloc(iCols * sizeof($1_basetype)); size_t jj; - for(jj=0;jj<iCols;jj++) - $1[ii][jj]=($1_basetype)_piData[jj*iRows+ii]; + for(jj = 0; jj < iCols; jj++) + $1[ii][jj] = ($1_basetype)_piData[jj * iRows+ii]; } } -%typemap(in) double [ANY][ANY](int *piAddrVar, int iRows, int iCols), - float [ANY][ANY](int *piAddrVar, int iRows, int iCols) { - double* _piData; +%typemap(in) double [ANY][ANY] (int *piAddrVar, int iRows, int iCols), + float [ANY][ANY] (int *piAddrVar, int iRows, int iCols) { + double *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -304,16 +304,16 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(iRows*sizeof($*1_ltype)); + $1 = ($1_ltype)malloc(iRows * sizeof($*1_ltype)); size_t ii; - for(ii=0;ii<iRows;ii++){ - $1[ii]=($*1_ltype)malloc(iCols*sizeof($1_basetype)); + for(ii = 0; ii < iRows; ii++){ + $1[ii] = ($*1_ltype)malloc(iCols * sizeof($1_basetype)); size_t jj; - for(jj=0;jj<iCols;jj++) - $1[ii][jj]=($1_basetype)_piData[jj*iRows+ii]; + for(jj = 0; jj < iCols; jj++) + $1[ii][jj] = ($1_basetype)_piData[jj * iRows+ii]; } } @@ -326,7 +326,7 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - $1=($1_ltype)*_piData; + $1 = ($1_ltype)*_piData; } %typemap(in) SWIGTYPE { @@ -337,121 +337,121 @@ * ----------------------------------------------------------------------------- */ /* Basic C types */ -%typemap(out) signed char (int iRowsOut,int iColsOut) { +%typemap(out) signed char (int iRowsOut, int iColsOut) { char temp; - temp=(char)($result); - iRowsOut=1; - iColsOut=1; + temp = (char)($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } -%typemap(out) short (int iRowsOut,int iColsOut), - unsigned char (int iRowsOut,int iColsOut) { +%typemap(out) short (int iRowsOut, int iColsOut), + unsigned char (int iRowsOut, int iColsOut) { short temp; - temp=(short)($result); - iRowsOut=1; - iColsOut=1; + temp = (short)($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } -%typemap(out) int (int iRowsOut,int iColsOut), - unsigned int (int iRowsOut,int iColsOut), - unsigned short (int iRowsOut,int iColsOut), - unsigned long (int iRowsOut,int iColsOut), - long (int iRowsOut,int iColsOut) { +%typemap(out) int (int iRowsOut, int iColsOut), + unsigned int (int iRowsOut, int iColsOut), + unsigned short (int iRowsOut, int iColsOut), + unsigned long (int iRowsOut, int iColsOut), + long (int iRowsOut, int iColsOut) { int temp; - temp=(int)($result); - iRowsOut=1; - iColsOut=1; + temp = (int)($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } -%typemap(out) double (int iRowsOut,int iColsOut), - float (int iRowsOut,int iColsOut) { +%typemap(out) double (int iRowsOut, int iColsOut), + float (int iRowsOut, int iColsOut) { double temp; - temp=(double)($result); - iRowsOut=1; - iColsOut=1; + temp = (double)($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } -%typemap(out) char (int iRowsOut,int iColsOut) { - char* temp; - temp=(char*)&($result); - iRowsOut=1; - iColsOut=1; +%typemap(out) char (int iRowsOut, int iColsOut) { + char *temp; + temp = (char*)&($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(out,noblock=1) void { } /* Pointers */ -%typemap(out) signed char *(int iRowsOut,int iColsOut) { +%typemap(out) signed char *(int iRowsOut, int iColsOut) { char *temp; - temp=(char *)($result); - iRowsOut=1; - iColsOut=1; + temp = (char *)($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } -%typemap(out) short *(int iRowsOut,int iColsOut), - unsigned char *(int iRowsOut,int iColsOut) { +%typemap(out) short *(int iRowsOut, int iColsOut), + unsigned char *(int iRowsOut, int iColsOut) { short *temp; - temp=(short *)($result); - iRowsOut=1; - iColsOut=1; + temp = (short *)($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } -%typemap(out) int *(int iRowsOut,int iColsOut), - unsigned int *(int iRowsOut,int iColsOut), - unsigned short *(int iRowsOut,int iColsOut), - unsigned long *(int iRowsOut,int iColsOut), - long *(int iRowsOut,int iColsOut) { +%typemap(out) int *(int iRowsOut, int iColsOut), + unsigned int *(int iRowsOut, int iColsOut), + unsigned short *(int iRowsOut, int iColsOut), + unsigned long *(int iRowsOut, int iColsOut), + long *(int iRowsOut, int iColsOut) { int *temp; - temp=(int *)($result); - iRowsOut=1; - iColsOut=1; + temp = (int *)($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(out) double *, float * { double *temp; - temp=(double *)($result); - iRowsOut=1; - iColsOut=1; + temp = (double *)($result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; iOutNum++; iVarOut++; } -%typemap(out) char *(int iRowsOut,int iColsOut){ - iRowsOut=1; - iColsOut=1; +%typemap(out) char *(int iRowsOut, int iColsOut){ + iRowsOut = 1; + iColsOut = 1; createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result)); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(freearg, noblock=1) char * { if ($1) free($1); } -%typemap(out) SWIGTYPE *(int iRowsOut,int iColsOut) { - iRowsOut=1; - iColsOut=1; +%typemap(out) SWIGTYPE *(int iRowsOut, int iColsOut) { + iRowsOut = 1; + iColsOut = 1; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } /* ----------------------------------------------------------------------------- @@ -468,7 +468,7 @@ unsigned long, float, double { - double* _piData; + double *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -476,11 +476,11 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - $1=($1_ltype)*_piData; + $1 = ($1_ltype)*_piData; } %typemap(varin,noblock=1) char { - char* _pstStrings; + char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -489,12 +489,11 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); - $1=($1_ltype)*_pstStrings; + $1 = ($1_ltype)*_pstStrings; } -%typemap(varin,noblock=1) char *, - char [ANY] { - char* _pstStrings; +%typemap(varin,noblock=1) char * { + char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -503,39 +502,90 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); - $1=strdup(_pstStrings); + $1 = strdup(_pstStrings); } +%typemap(varin,noblock=1) char [ANY] { + char *_pstStrings; + int _piLength; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + strcpy($1, _pstStrings); +} + +%typemap(varin,noblock=1) int *{ + int *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + + getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); + if($1 != NULL) { + free($1); + } + $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); + for(index = 0; index < iRows * iCols; index++) { + $1[index] = ($*1_ltype)_piData[index]; + } +} + +%typemap(varin,noblock=1) short * { + short *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + + getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); + if($1 != NULL) { + free($1); + } + $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); + for(index = 0; index < iRows * iCols; index++) { + $1[index] = ($*1_ltype)_piData[index]; + } +} + %typemap(varin,noblock=1) double *, float * { - double* _piData; + double *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); if (getVarType(piAddrVar) == sci_matrix ){ if(!isVarComplex(piAddrVar)) { - isComplex=0; + isComplex = 0; getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; + $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); + for(index = 0; index < iRows * iCols; index++){ + $1[index] = ($*1_ltype)_piData[index]; } } else { - isComplex=1; + isComplex = 1; double *_pdblImg; getComplexMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData, &_pdblImg); - if($1!=NULL) { + if($1 != NULL) { free($1); } - $1=($1_ltype)malloc(2*iRows*iCols*sizeof($*1_ltype)); - for(index=0;index<iRows*iCols;index++){ - $1[index]=($*1_ltype)_piData[index]; - $1[index+iRows*iCols]=(double)_pdblImg[index]; + $1 = ($1_ltype)malloc(2 * iRows * iCols * sizeof($*1_ltype)); + for(index = 0; index < iRows * iCols; index++){ + $1[index] = ($*1_ltype)_piData[index]; + $1[index + iRows * iCols] = (double)_pdblImg[index]; } } } @@ -544,25 +594,49 @@ } } +%typemap(varin,noblock=1) char ** { + char **_pstStrings; + int *_piLength; + int i; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_strings || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + + _piLength = (int*)malloc(sizeof(int) * iRows * iCols); + getMatrixOfString(piAddrVar, &iRows, &iCols, _piLength, NULL); + + _pstStrings = (char**)malloc(iRows * iCols * sizeof(char*)); + for(i = 0; i < iRows * iCols; i++) { + _pstStrings[i] = (char*)malloc((_piLength[i] + 1) * sizeof(char)); + } + getMatrixOfString(piAddrVar, &iRows, &iCols, _piLength, _pstStrings); + + $1 = _pstStrings; +} + + /* ----------------------------------------------------------------------------- * --- Variable output --- * ----------------------------------------------------------------------------- */ /* Basic C types */ %typemap(varout,noblock=1) signed char { createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &$result); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) short { createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &$result); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) unsigned char { short temp; - temp=$result; + temp = $result; createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) int, @@ -571,45 +645,79 @@ unsigned long, long { createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &$result); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) double { createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) float { double temp; - temp=(double)$result; + temp = (double)$result; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) char { - char* temp; - temp=(char*)&($result); + char *temp; + temp = (char*)&($result); createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } -%typemap(varout,noblock=1) char * { +%typemap(varout,noblock=1) char *{ createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result)); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } +%typemap(varout,noblock=1) int *{ + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, $result); + LhsVar(iOutNum) = iVarOut; + if($result != NULL) + free($result); +} + +%typemap(varout,noblock=1) short *{ + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, $result); + LhsVar(iOutNum) = iVarOut; + if($result != NULL) + free($result); +} + %typemap(varout,noblock=1) double *, float * { if(isComplex) { - createComplexMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result,&$result[iRowsOut*iColsOut]); - LhsVar(iOutNum)=iVarOut; + createComplexMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result, &$result[iRowsOut * iColsOut]); + LhsVar(iOutNum) = iVarOut; } else { createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } } +%typemap(varout,noblock=1) char [ANY] { + char **pstData = NULL; + pstData = (char **)malloc(sizeof(char *)); + pstData[0] = $result; + createMatrixOfString(iVarOut, iRowsOut, iColsOut, pstData); + LhsVar(iOutNum) = iVarOut; + +} + +%typemap(varout,noblock=1) char ** { + char **pstData = NULL; + pstData = (char **)malloc(iRowsOut * iColsOut * sizeof(char*)); + pstData = $result; + createMatrixOfString(iVarOut, iRowsOut, iColsOut, pstData); + LhsVar(iOutNum) = iVarOut; +} + + + + /* ------------------------------------------------------------ * Enums mapped as integer values * ------------------------------------------------------------ */ Modified: branches/gsoc2009-sploving/Lib/scilab/typemaps.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-07-17 11:17:01 UTC (rev 11414) +++ branches/gsoc2009-sploving/Lib/scilab/typemaps.i 2009-07-17 16:21:54 UTC (rev 11415) @@ -63,7 +63,7 @@ unsigned long *INPUT (int *piAddrVar, int iRows, int iCols, unsigned long temp), float *INPUT (int *piAddrVar, int iRows, int iCols, float temp), double *INPUT (int *piAddrVar, int iRows, int iCols, double temp) { - double* _piData; + double *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -71,8 +71,8 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - temp=($*1_ltype)*_piData; - $1=&temp; + temp = ($*1_ltype)*_piData; + $1 = &temp; } #undef INPUT_TYPEMAP @@ -133,44 +133,44 @@ unsigned long *OUTPUT (unsigned long temp), float *OUTPUT (float temp), double *OUTPUT (double temp) { - $1=($1_ltype)&temp; + $1 = ($1_ltype)&temp; } -%typemap(argout) signed char *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress) { - iRowsOut=1; - iColsOut=1; - createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); - LhsVar(iOutNum)=iVarOut; +%typemap(argout) signed char *OUTPUT(int iRowsOut, int iColsOut) { + iRowsOut = 1; + iColsOut = 1; + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp$argnum); + LhsVar(iOutNum) = iVarOut; } -%typemap(argout) short *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), - unsigned char *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress) { - iRowsOut=1; - iColsOut=1; - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); - LhsVar(iOutNum)=iVarOut; +%typemap(argout) short *OUTPUT(int iRowsOut, int iColsOut), + unsigned char *OUTPUT(int iRowsOut, int iColsOut) { + iRowsOut = 1; + iColsOut = 1; + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp$argnum); + LhsVar(iOutNum) = iVarOut; } -%typemap(argout) int *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), - unsigned int *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), - unsigned short *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), - unsigned long *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress), - long *OUTPUT(int iRowsOut,int iColsOut,int* _piAddress) { +%typemap(argout) int *OUTPUT(int iRowsOut,int iColsOut), + unsigned int *OUTPUT(int iRowsOut,int iColsOut), + unsigned short *OUTPUT(int iRowsOut,int iColsOut), + unsigned long *OUTPUT(int iRowsOut,int iColsOut), + long *OUTPUT(int iRowsOut,int iColsOut) { iRowsOut=1; iColsOut=1; - createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp$argnum, &_piAddress); + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp$argnum); LhsVar(iOutNum)=iVarOut; } -%typemap(argout) double *OUTPUT(int iRowsOut,int iColsOut), - float *OUTPUT(int iRowsOut,int iColsOut) { +%typemap(argout) double *OUTPUT(int iRowsOut, int iColsOut), + float *OUTPUT(int iRowsOut, int iColsOut) { double temp; - temp=(double)(*$result); - iRowsOut=1; - iColsOut=1; + temp = (double)(*$result); + iRowsOut = 1; + iColsOut = 1; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp$argnum); - LhsVar(iOutNum)=iVarOut; + LhsVar(iOutNum) = iVarOut; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-07-19 00:13:07
|
Revision: 11423 http://swig.svn.sourceforge.net/swig/?rev=11423&view=rev Author: sploving Date: 2009-07-18 23:45:53 +0000 (Sat, 18 Jul 2009) Log Message: ----------- merge from trunk Modified Paths: -------------- branches/gsoc2009-sploving/CHANGES.current branches/gsoc2009-sploving/Doc/Manual/Perl5.html branches/gsoc2009-sploving/Doc/Manual/Typemaps.html branches/gsoc2009-sploving/Doc/Manual/Windows.html branches/gsoc2009-sploving/Examples/octave/pointer/Makefile branches/gsoc2009-sploving/Examples/octave/pointer/example.i branches/gsoc2009-sploving/Examples/python/pointer/Makefile branches/gsoc2009-sploving/Examples/test-suite/common.mk branches/gsoc2009-sploving/Examples/test-suite/octave/empty_runme.m branches/gsoc2009-sploving/Examples/test-suite/php/rename_scope_runme.php branches/gsoc2009-sploving/Examples/test-suite/throw_exception.i branches/gsoc2009-sploving/Lib/octave/octrun.swg branches/gsoc2009-sploving/Lib/octave/octruntime.swg branches/gsoc2009-sploving/Lib/php/phpkw.swg branches/gsoc2009-sploving/Lib/php/phprun.swg branches/gsoc2009-sploving/Source/Include/swigwarn.h branches/gsoc2009-sploving/Source/Modules/allegrocl.cxx branches/gsoc2009-sploving/Source/Modules/cffi.cxx branches/gsoc2009-sploving/Source/Modules/clisp.cxx branches/gsoc2009-sploving/Source/Modules/csharp.cxx branches/gsoc2009-sploving/Source/Modules/java.cxx branches/gsoc2009-sploving/Source/Modules/modula3.cxx branches/gsoc2009-sploving/Source/Modules/octave.cxx branches/gsoc2009-sploving/Source/Modules/perl5.cxx branches/gsoc2009-sploving/Source/Modules/php.cxx branches/gsoc2009-sploving/Source/Modules/python.cxx branches/gsoc2009-sploving/Source/Modules/uffi.cxx branches/gsoc2009-sploving/Source/Swig/swig.h branches/gsoc2009-sploving/Source/Swig/typemap.c Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/java/memberin_extend_runme.java branches/gsoc2009-sploving/Examples/test-suite/memberin_extend.i Property Changed: ---------------- branches/gsoc2009-sploving/ Property changes on: branches/gsoc2009-sploving ___________________________________________________________________ Modified: svn:mergeinfo - /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11359 + /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11422 Modified: branches/gsoc2009-sploving/CHANGES.current =================================================================== --- branches/gsoc2009-sploving/CHANGES.current 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/CHANGES.current 2009-07-18 23:45:53 UTC (rev 11423) @@ -1,6 +1,16 @@ Version 1.3.40 (in progress) ============================ +2009-07-15: olly + [Perl] Don't specify Perl prototype "()" for a constructor with a + different name to the class, as such constructors can still take + parameters. + +2009-07-05: olly + [PHP] Update the list of PHP keywords - "cfunction" is no longer a + keyword in PHP5 and PHP 5.3 added "goto", "namespace", "__DIR__", + and "__NAMESPACE__". + 2009-07-03: olly [Tcl] To complement USE_TCL_STUBS, add support for USE_TK_STUBS and SWIG_TCL_STUBS_VERSION. Document all three in the Tcl chapter Modified: branches/gsoc2009-sploving/Doc/Manual/Perl5.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Perl5.html 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Doc/Manual/Perl5.html 2009-07-18 23:45:53 UTC (rev 11423) @@ -40,7 +40,7 @@ <li><a href="#Perl5_nn24">Modules and packages</a> </ul> <li><a href="#Perl5_nn25">Input and output parameters</a> -<li><a href="#Perl5_nn26">Exception handling </a> +<li><a href="#Perl5_nn26">Exception handling</a> <li><a href="#Perl5_nn27">Remapping datatypes with typemaps</a> <ul> <li><a href="#Perl5_nn28">A simple typemap example</a> @@ -50,8 +50,8 @@ </ul> <li><a href="#Perl5_nn32">Typemap Examples</a> <ul> -<li><a href="#Perl5_nn33">Converting a Perl5 array to a char ** </a> -<li><a href="#Perl5_nn34">Return values </a> +<li><a href="#Perl5_nn33">Converting a Perl5 array to a char **</a> +<li><a href="#Perl5_nn34">Return values</a> <li><a href="#Perl5_nn35">Returning values from arguments</a> <li><a href="#Perl5_nn36">Accessing array structure members</a> <li><a href="#Perl5_nn37">Turning Perl references into C pointers</a> @@ -815,7 +815,7 @@ <p> -Constants are wrapped as read-only Perl variables. For example: +By default, constants are wrapped as read-only Perl variables. For example: </p> <div class="code"> @@ -838,6 +838,19 @@ </pre> </div> +<p> +Alternatively, if you use swig's <tt>-const</tt> option, constants are wrapped +such that the leading $ isn't required (by using a constant subroutine), which +usually gives a more natural Perl interface, for example: +</p> + +<div class="targetlang"> +<pre> +use example; +print example::FOO,"\n"; +</pre> +</div> + <H3><a name="Perl5_nn18"></a>28.4.4 Pointers</H3> @@ -879,7 +892,7 @@ </pre></div> <p> -To create a NULL pointer, you should pass the <tt>undef </tt>value to +To create a NULL pointer, you should pass the <tt>undef</tt> value to a function. </p> @@ -889,7 +902,7 @@ and <tt>$b</tt> are two references that point to the same C object. In general, <tt>$a</tt> and <tt>$b</tt> will be different--since they are different references. Thus, it is a mistake to check the equality -of <tt>$a </tt>and <tt>$b</tt> to check the equality of two C +of <tt>$a</tt> and <tt>$b</tt> to check the equality of two C pointers. The correct method to check equality of C pointers is to dereference them as follows : </p> @@ -1567,7 +1580,7 @@ <b>Note:</b> The <tt>REFERENCE</tt> feature is only currently supported for numeric types (integers and floating point). </p> -<H2><a name="Perl5_nn26"></a>28.6 Exception handling </H2> +<H2><a name="Perl5_nn26"></a>28.6 Exception handling</H2> <p> @@ -2107,7 +2120,7 @@ the SWIG library. </p> -<H3><a name="Perl5_nn33"></a>28.8.1 Converting a Perl5 array to a char ** </H3> +<H3><a name="Perl5_nn33"></a>28.8.1 Converting a Perl5 array to a char **</H3> <p> @@ -2199,7 +2212,7 @@ </pre></div> -<H3><a name="Perl5_nn34"></a>28.8.2 Return values </H3> +<H3><a name="Perl5_nn34"></a>28.8.2 Return values</H3> <p> @@ -2714,7 +2727,7 @@ frequently when constructing objects like linked lists and trees). When C takes possession of an object, you can change Perl's ownership by simply deleting the object from the <tt>%OWNER</tt> hash. This is -done using the <tt>DISOWN </tt>method. +done using the <tt>DISOWN</tt> method. </p> <div class="targetlang"><pre> Modified: branches/gsoc2009-sploving/Doc/Manual/Typemaps.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Typemaps.html 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Doc/Manual/Typemaps.html 2009-07-18 23:45:53 UTC (rev 11423) @@ -2636,8 +2636,9 @@ <p> The "out" typemap is the main typemap for return types. This typemap supports an optional attribute flag called "optimal", which is for reducing -temporary variables and the amount of generated code. -It only really makes a difference when returning objects by value and it cannot always be used, +temporary variables and the amount of generated code, thereby giving the compiler the opportunity to +use <i>return value optimization</i> for generating faster executing code. +It only really makes a difference when returning objects by value and has some limitations on usage, as explained later on. </p> @@ -2695,7 +2696,7 @@ Note that three objects are being created as well as an assignment. Wouldn't it be great if the <tt>XX::create()</tt> method was the only time a constructor was called? As the method returns by value, this is asking a lot and the code that SWIG generates by default -makes it impossible for the compiler to make this type of optimisation. +makes it impossible for the compiler to use <i>return value optimisation (RVO)</i>. However, this is where the "optimal" attribute in the "out" typemap can help out. If the typemap code is kept the same and just the "optimal" attribute specified like this: </p> @@ -2754,7 +2755,7 @@ <p> The major difference is the <tt>result</tt> temporary variable holding the value returned from <tt>XX::create()</tt> is no longer generated and instead the copy constructor call is made directly from the value returned by <tt>XX::create()</tt>. -With modern compiler optimisations turned on, the copy is not actually done, in fact the object is never created +With modern compilers implementing RVO, the copy is not actually done, in fact the object is never created on the stack in <tt>XX::create()</tt> at all, it is simply created directly on the heap. In the first instance, the <tt>$1</tt> special variable in the typemap is expanded into <tt>result</tt>. In the second instance, <tt>$1</tt> is expanded into <tt>XX::create()</tt> and this is essentially @@ -2762,7 +2763,7 @@ </p> <p> -This kind of optimisation is not turned on by default as it has a number of restrictions. +The "optimal" attribute optimisation is not turned on by default as it has a number of restrictions. Firstly, some code cannot be condensed into a simple call for passing into the copy constructor. One common occurrence is when <a href="Customization.html#exception">%exception</a> is used. Consider adding the following <tt>%exception</tt> to the example: Modified: branches/gsoc2009-sploving/Doc/Manual/Windows.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Windows.html 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Doc/Manual/Windows.html 2009-07-18 23:45:53 UTC (rev 11423) @@ -248,7 +248,7 @@ <ol> <li> Download the following packages from the <a href="http://www.mingw.org/download.shtml">MinGW download page</a> - or <a href="http://sourceforge.net/project/showfiles.php?group_id=2435">MinGW SourceForge download page</a>. + or <a href="http://sourceforge.net/projects/mingw/files/">MinGW SourceForge download page</a>. Note that at the time of writing, the majority of these are in the Current release list and some are in the Snapshot or Previous release list. <ul> Modified: branches/gsoc2009-sploving/Examples/octave/pointer/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/octave/pointer/Makefile 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Examples/octave/pointer/Makefile 2009-07-18 23:45:53 UTC (rev 11423) @@ -1,6 +1,6 @@ TOP = ../.. SWIG = $(TOP)/../preinst-swig -SRCS = example.i +SRCS = example.c TARGET = example INTERFACE = example.i Modified: branches/gsoc2009-sploving/Examples/octave/pointer/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/octave/pointer/example.i 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Examples/octave/pointer/example.i 2009-07-18 23:45:53 UTC (rev 11423) @@ -1,6 +1,26 @@ /* File : example.i */ %module example -FILE *fopen(char *filename, char *mode); -int fputs(char* , FILE *); -int fclose(FILE *); +%{ +extern void add(int *, int *, int *); +extern void sub(int *, int *, int *); +extern int divide(int, int, int *); +%} + +/* This example illustrates a couple of different techniques + for manipulating C pointers */ + +/* First we'll use the pointer library */ +extern void add(int *x, int *y, int *result); +%include cpointer.i +%pointer_functions(int, intp); + +/* Next we'll use some typemaps */ + +%include typemaps.i +extern void sub(int *INPUT, int *INPUT, int *OUTPUT); + +/* Next we'll use typemaps and the %apply directive */ + +%apply int *OUTPUT { int *r }; +extern int divide(int n, int d, int *r); Modified: branches/gsoc2009-sploving/Examples/python/pointer/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/python/pointer/Makefile 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Examples/python/pointer/Makefile 2009-07-18 23:45:53 UTC (rev 11423) @@ -1,6 +1,6 @@ TOP = ../.. SWIG = $(TOP)/../preinst-swig -SRCS = example.i +SRCS = example.c TARGET = example INTERFACE = example.i Modified: branches/gsoc2009-sploving/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/common.mk 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Examples/test-suite/common.mk 2009-07-18 23:45:53 UTC (rev 11423) @@ -79,7 +79,7 @@ extend_variable \ li_std_vector_ptr \ namespace_union \ - nested_struct \ + nested_structs \ overload_complicated \ template_default_pointer \ template_expr @@ -220,6 +220,7 @@ li_typemaps \ li_windows \ long_long_apply \ + memberin_extend \ member_pointer \ member_template \ minherit \ Copied: branches/gsoc2009-sploving/Examples/test-suite/java/memberin_extend_runme.java (from rev 11416, trunk/Examples/test-suite/java/memberin_extend_runme.java) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/java/memberin_extend_runme.java (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/java/memberin_extend_runme.java 2009-07-18 23:45:53 UTC (rev 11423) @@ -0,0 +1,26 @@ + +import memberin_extend.*; + +public class memberin_extend_runme { + static { + try { + System.loadLibrary("memberin_extend"); + } catch (UnsatisfiedLinkError e) { + System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); + System.exit(1); + } + } + + public static void main(String argv[]) + { + ExtendMe em1 = new ExtendMe(); + ExtendMe em2 = new ExtendMe(); + em1.setThing("em1thing"); + em2.setThing("em2thing"); + if (!em1.getThing().equals("em1thing")) + throw new RuntimeException("wrong: " + em1.getThing()); + if (!em2.getThing().equals("em2thing")) + throw new RuntimeException("wrong: " + em2.getThing()); + } +} + Copied: branches/gsoc2009-sploving/Examples/test-suite/memberin_extend.i (from rev 11416, trunk/Examples/test-suite/memberin_extend.i) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/memberin_extend.i (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/memberin_extend.i 2009-07-18 23:45:53 UTC (rev 11423) @@ -0,0 +1,22 @@ +%module memberin_extend + +// Tests memberin typemap. The default char * memberin typemap will be used. +// The test extends the struct with a pseudo member variable + +%inline %{ +#include <string> +struct ExtendMe { +}; +%} + +%{ +#include <map> +std::map<ExtendMe*, char *> ExtendMeStringMap; +#define ExtendMe_thing_set(self_, val_) ExtendMeStringMap[self_] +#define ExtendMe_thing_get(self_) ExtendMeStringMap[self_] +%} + +%extend ExtendMe { + char *thing; +} + Modified: branches/gsoc2009-sploving/Examples/test-suite/octave/empty_runme.m =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/octave/empty_runme.m 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Examples/test-suite/octave/empty_runme.m 2009-07-18 23:45:53 UTC (rev 11423) @@ -1 +1,17 @@ empty + +printf("begin\n"); +who global + +printf("after load\n"); +who global + +#clear -g +printf("after clear\n"); +who global + +#clear empty +printf("after clear specific\n"); +who global + +printf("before shutdown\n"); Modified: branches/gsoc2009-sploving/Examples/test-suite/php/rename_scope_runme.php =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/php/rename_scope_runme.php 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Examples/test-suite/php/rename_scope_runme.php 2009-07-18 23:45:53 UTC (rev 11423) @@ -6,12 +6,12 @@ check::classes(array("rename_scope","Interface_UP","Interface_BP","Natural_UP","Natural_BP","Bucket")); -check::classmethods("Interface_UP",array("interface_up")); -check::classmethods("Interface_BP",array("interface_bp")); -check::classmethods("Natural_UP",array("interface_up","natural_up","rtest")); -check::classmethods("Natural_BP",array("interface_bp","natural_bp","rtest")); -check::classparent("Natural_UP","interface_up"); -check::classparent("Natural_BP","interface_bp"); +check::classmethods("Interface_UP",array("__construct")); +check::classmethods("Interface_BP",array("__construct")); +check::classmethods("Natural_UP",array("__construct","rtest")); +check::classmethods("Natural_BP",array("__construct","rtest")); +check::classparent("Natural_UP","Interface_UP"); +check::classparent("Natural_BP","Interface_BP"); check::done(); ?> Modified: branches/gsoc2009-sploving/Examples/test-suite/throw_exception.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/throw_exception.i 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Examples/test-suite/throw_exception.i 2009-07-18 23:45:53 UTC (rev 11423) @@ -8,6 +8,9 @@ %warnfilter(SWIGWARN_RUBY_WRONG_NAME) Namespace::enum1; %warnfilter(SWIGWARN_RUBY_WRONG_NAME) Namespace::enum2; +#ifdef SWIGPHP +%warnfilter(SWIGWARN_PARSE_KEYWORD) Namespace; +#endif // Tests SWIG's automatic exception mechanism Modified: branches/gsoc2009-sploving/Lib/octave/octrun.swg =================================================================== --- branches/gsoc2009-sploving/Lib/octave/octrun.swg 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Lib/octave/octrun.swg 2009-07-18 23:45:53 UTC (rev 11423) @@ -105,27 +105,35 @@ typedef std::map < void *, Director * > rtdir_map; - SWIGINTERN rtdir_map &get_rtdir_map() { + SWIGINTERN rtdir_map* get_rtdir_map() { static swig_module_info *module = 0; if (!module) module = SWIG_GetModule(0); - assert(module); + if (!module) + return 0; if (!module->clientdata) module->clientdata = new rtdir_map; - return *(rtdir_map *) module->clientdata; + return (rtdir_map *) module->clientdata; } SWIGINTERNINLINE void set_rtdir(void *vptr, Director *d) { - get_rtdir_map()[vptr] = d; + rtdir_map* rm = get_rtdir_map(); + if (rm) + (*rm)[vptr] = d; } SWIGINTERNINLINE void erase_rtdir(void *vptr) { - get_rtdir_map().erase(vptr); + rtdir_map* rm = get_rtdir_map(); + if (rm) + (*rm).erase(vptr); } SWIGINTERNINLINE Director *get_rtdir(void *vptr) { - rtdir_map::const_iterator pos = get_rtdir_map().find(vptr); - Director *rtdir = (pos != get_rtdir_map().end())? pos->second : 0; + rtdir_map* rm = get_rtdir_map(); + if (!rm) + return 0; + rtdir_map::const_iterator pos = rm->find(vptr); + Director *rtdir = (pos != rm->end())? pos->second : 0; return rtdir; } } @@ -439,9 +447,15 @@ install_builtin_function(it->second.first->method, it->first, it->second.first->doc?it->second.first->doc:std::string()); else if (it->second.second.is_defined()) { +#if USE_OCTAVE_API_VERSION<37 link_to_global_variable(curr_sym_tab->lookup(it->first, true)); +#else + symbol_table::varref(it->first); + symbol_table::mark_global(it->first); +#endif set_global_value(it->first, it->second.second); +#if USE_OCTAVE_API_VERSION<37 octave_swig_type *ost = Swig::swig_value_deref(it->second.second); if (ost) { const char* h = ost->help_text(); @@ -450,6 +464,7 @@ sr->document(h); } } +#endif } } } @@ -1352,6 +1367,11 @@ SWIGRUNTIME void SWIG_Octave_SetModule(void *clientdata, swig_module_info *pointer) { octave_value ov = new octave_swig_packed(0, &pointer, sizeof(swig_module_info *)); const char *module_var = "__SWIG_MODULE__" SWIG_TYPE_TABLE_NAME SWIG_RUNTIME_VERSION; +#if USE_OCTAVE_API_VERSION<37 link_to_global_variable(curr_sym_tab->lookup(module_var, true)); +#else + symbol_table::varref(module_var); + symbol_table::mark_global(module_var); +#endif set_global_value(module_var, ov); } Modified: branches/gsoc2009-sploving/Lib/octave/octruntime.swg =================================================================== --- branches/gsoc2009-sploving/Lib/octave/octruntime.swg 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Lib/octave/octruntime.swg 2009-07-18 23:45:53 UTC (rev 11423) @@ -72,11 +72,33 @@ module_ns->install_global(); module_ns->decref(); +#if USE_OCTAVE_API_VERSION<37 link_to_global_variable(curr_sym_tab->lookup(SWIG_name_d,true)); +#else + symbol_table::varref(SWIG_name_d); + symbol_table::mark_global(SWIG_name_d); +#endif set_global_value(SWIG_name_d,Swig::swig_value_ref(module_ns)); +#if USE_OCTAVE_API_VERSION>=37 + mlock(); +#endif + return octave_value_list(); } +// workaround bug in octave where installing global variable of custom type and then +// exiting without explicitly clearing the variable causes octave to segfault. +#if USE_OCTAVE_API_VERSION>=37 +struct oct_file_unload { + ~oct_file_unload() { + string_vector vars = symbol_table::global_variable_names(); + for (int i = 0; i < vars.length(); i++) + symbol_table::clear_global(vars[i]); + } +}; +static oct_file_unload __unload; +#endif + %} Modified: branches/gsoc2009-sploving/Lib/php/phpkw.swg =================================================================== --- branches/gsoc2009-sploving/Lib/php/phpkw.swg 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Lib/php/phpkw.swg 2009-07-18 23:45:53 UTC (rev 11423) @@ -8,21 +8,22 @@ * when used as class methods. * ----------------------------------------------------------------------------- */ -#define PHPKW(x) %keywordwarn("'" `x` "' is a php keyword, renamed as 'c_" `x` "'",sourcefmt="%(lower)s", rename="c_%s",fullname=1) `x` +#define PHPKW(x) %keywordwarn("'" `x` "' is a PHP keyword, renamed as 'c_" `x` "'",sourcefmt="%(lower)s", rename="c_%s",fullname=1) `x` %define PHPCN(x) -%keywordwarn("'" `x` "' is a php reserved class name, class renamed as 'c_" `x` "'",%$isclass,rename="c_%s") `x`; -%keywordwarn("'" `x` "' is a php reserved class name, constructor renamed as 'c_" `x` "'",%$isconstructor,rename="c_%s") `x`; +%keywordwarn("'" `x` "' is a PHP reserved class name, class renamed as 'c_" `x` "'",%$isclass,rename="c_%s") `x`; +%keywordwarn("'" `x` "' is a PHP reserved class name, constructor renamed as 'c_" `x` "'",%$isconstructor,rename="c_%s") `x`; %enddef -#define PHPBN1(x) %builtinwarn("'" `x` "' conflicts with a built-in name in php",sourcefmt="%(lower)s",fullname=1) `x` -#define PHPBN2(x) %builtinwarn("'" `x` "' conflicts with a built-in name in php") "::" `x` +#define PHPBN1(x) %builtinwarn("'" `x` "' conflicts with a built-in name in PHP",sourcefmt="%(lower)s",fullname=1) `x` +#define PHPBN2(x) %builtinwarn("'" `x` "' conflicts with a built-in name in PHP") "::" `x` /* From http://aspn.activestate.com/ASPN/docs/PHP/reserved.html + http://php.net/manual/en/reserved.keywords.php and reviewed by Olly Betts. @@ -30,76 +31,81 @@ */ /* We classify these as kw since PHP will not run if used globally. */ +/* "You cannot use any of the following words as constants, class names, + * function or method names. Using them as variable names is generally OK, but + * could lead to confusion." + */ /* case insensitive */ +PHPKW(__halt_compiler); +PHPKW(abstract); PHPKW(and); PHPKW(array); PHPKW(as); PHPKW(break); PHPKW(case); -PHPKW(cfunction); /* No longer reserved in PHP5 */ +PHPKW(catch); PHPKW(class); +PHPKW(clone); PHPKW(const); PHPKW(continue); PHPKW(declare); PHPKW(default); -PHPKW(die); +PHPKW(die); // "Language construct" PHPKW(do); -PHPKW(echo); +PHPKW(echo); // "Language construct" PHPKW(else); PHPKW(elseif); -PHPKW(empty); +PHPKW(empty); // "Language construct" PHPKW(enddeclare); PHPKW(endfor); PHPKW(endforeach); PHPKW(endif); PHPKW(endswitch); PHPKW(endwhile); -PHPKW(eval); -PHPKW(exit); +PHPKW(eval); // "Language construct" +PHPKW(exit); // "Language construct" PHPKW(extends); +PHPKW(final); PHPKW(for); PHPKW(foreach); PHPKW(function); PHPKW(global); +PHPKW(goto); // As of PHP5.3 PHPKW(if); -PHPKW(include); -PHPKW(include_once); -PHPKW(isset); -PHPKW(list); +PHPKW(implements); +PHPKW(include); // "Language construct" +PHPKW(include_once); // "Language construct" +PHPKW(instanceof); +PHPKW(interface); +PHPKW(isset); // "Language construct" +PHPKW(list); // "Language construct" +PHPKW(namespace); // As of PHP5.3 PHPKW(new); -// PHPKW(old_function); /* No longer reserved in PHP5 */ PHPKW(or); -PHPKW(print); -PHPKW(require); -PHPKW(require_once); -PHPKW(return); +PHPKW(print); // "Language construct" +PHPKW(private); +PHPKW(protected); +PHPKW(public); +PHPKW(require); // "Language construct" +PHPKW(require_once); // "Language construct" +PHPKW(return); // "Language construct" PHPKW(static); PHPKW(switch); -PHPKW(unset); +PHPKW(throw); +PHPKW(try); +PHPKW(unset); // "Language construct" PHPKW(use); PHPKW(var); PHPKW(while); PHPKW(xor); +// Compile-time constants +PHPKW(__CLASS__); +PHPKW(__DIR__); // As of PHP5.3 PHPKW(__FILE__); -PHPKW(__LINE__); PHPKW(__FUNCTION__); -PHPKW(__CLASS__); - -/* Added in PHP5 */ -PHPKW(__halt_compiler); -PHPKW(abstract); -PHPKW(catch); -PHPKW(clone); -PHPKW(final); -PHPKW(implements); -PHPKW(instanceof); -PHPKW(interface); -PHPKW(private); -PHPKW(protected); -PHPKW(public); -PHPKW(throw); -PHPKW(try); PHPKW(__METHOD__); +PHPKW(__NAMESPACE__); // As of PHP5.3 +PHPKW(__LINE__); /* We classify these as built-in names since they conflict, but PHP still runs */ Modified: branches/gsoc2009-sploving/Lib/php/phprun.swg =================================================================== --- branches/gsoc2009-sploving/Lib/php/phprun.swg 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Lib/php/phprun.swg 2009-07-18 23:45:53 UTC (rev 11423) @@ -75,7 +75,7 @@ /* used to wrap returned objects in so we know whether they are newobject and need freeing, or not */ -typedef struct _swig_object_wrapper { +typedef struct { void * ptr; int newobject; } swig_object_wrapper; Modified: branches/gsoc2009-sploving/Source/Include/swigwarn.h =================================================================== --- branches/gsoc2009-sploving/Source/Include/swigwarn.h 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Source/Include/swigwarn.h 2009-07-18 23:45:53 UTC (rev 11423) @@ -248,16 +248,9 @@ /* please leave 850-869 free for Modula 3 */ -/* These are needed for backward compatibility, but you don't need to add - * PHP4 versions of new warnings since existing user interface files can't - * be using them. - */ #define WARN_PHP_MULTIPLE_INHERITANCE 870 #define WARN_PHP_UNKNOWN_PRAGMA 871 -#define WARN_PHP_MULTIPLE_INHERITANCE 870 -#define WARN_PHP_UNKNOWN_PRAGMA 871 - /* please leave 870-889 free for PHP */ Modified: branches/gsoc2009-sploving/Source/Modules/allegrocl.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/allegrocl.cxx 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Source/Modules/allegrocl.cxx 2009-07-18 23:45:53 UTC (rev 11423) @@ -626,7 +626,7 @@ add_defined_foreign_type(0, 0, t, t, implicit_ns ? implicit_ns : current_namespace); } -String *get_ffi_type(SwigType *ty, const_String_or_char_ptr name) { +String *get_ffi_type(Node *n, SwigType *ty, const_String_or_char_ptr name) { /* lookup defined foreign type. if it exists, it will return a form suitable for placing into lisp code to generate the def-foreign-type name */ @@ -641,18 +641,20 @@ #ifdef ALLEGROCL_TYPE_DEBUG Printf(stderr, "found_type '%s'\n", found_type); #endif - return (Strcmp(found_type, "forward-reference") ? Copy(found_type) : - get_ffi_type(fwdref_ffi_type, "")); + return (Strcmp(found_type, "forward-reference") ? Copy(found_type) : get_ffi_type(n, fwdref_ffi_type, "")); } else { - Hash *typemap = Swig_typemap_search("ffitype", ty, name, 0); + Node *node = NewHash(); + Setattr(node, "type", ty); + Setfile(node, Getfile(n)); + Setline(node, Getline(n)); + const String *tm = Swig_typemap_lookup("ffitype", node, name, 0); + Delete(node); - if (typemap) { - String *typespec = Getattr(typemap, "code"); - + if (tm) { #ifdef ALLEGROCL_TYPE_DEBUG - Printf(stderr, "g-f-t: found ffitype typemap '%s'\n%s\n", typespec, typemap); + Printf(stderr, "g-f-t: found ffitype typemap '%s'\n", tm); #endif - return NewString(typespec); + return NewString(tm); } if (SwigType_istemplate(ty)) { @@ -673,7 +675,7 @@ /* walk type and return string containing lisp version. recursive. */ -String *internal_compose_foreign_type(SwigType *ty) { +String *internal_compose_foreign_type(Node *n, SwigType *ty) { SwigType *tok; String *ffiType = NewString(""); @@ -691,18 +693,18 @@ Printf(ffiType, "("); // start parm list for (Iterator i = First(pl); i.item; i = Next(i)) { SwigType *f_arg = SwigType_strip_qualifiers(i.item); - Printf(ffiType, "%s ", internal_compose_foreign_type(f_arg)); + Printf(ffiType, "%s ", internal_compose_foreign_type(n, f_arg)); Delete(f_arg); } Printf(ffiType, ")"); // end parm list. // do function return type. - Printf(ffiType, " %s)", internal_compose_foreign_type(ty)); + Printf(ffiType, " %s)", internal_compose_foreign_type(n, ty)); break; } else if (SwigType_ispointer(tok) || SwigType_isreference(tok)) { - Printf(ffiType, "(* %s)", internal_compose_foreign_type(ty)); + Printf(ffiType, "(* %s)", internal_compose_foreign_type(n, ty)); } else if (SwigType_isarray(tok)) { - Printf(ffiType, "(:array %s", internal_compose_foreign_type(ty)); + Printf(ffiType, "(:array %s", internal_compose_foreign_type(n, ty)); String *atype = NewString("int"); String *dim = convert_literal(SwigType_array_getdim(tok, 0), atype); Delete(atype); @@ -713,18 +715,18 @@ } } else if (SwigType_ismemberpointer(tok)) { // temp - Printf(ffiType, "(* %s)", internal_compose_foreign_type(ty)); + Printf(ffiType, "(* %s)", internal_compose_foreign_type(n, ty)); } else { - String *res = get_ffi_type(tok, ""); + String *res = get_ffi_type(n, tok, ""); if (res) { Printf(ffiType, "%s", res); } else { SwigType *resolved_type = SwigType_typedef_resolve(tok); if (resolved_type) { - res = get_ffi_type(resolved_type, ""); + res = get_ffi_type(n, resolved_type, ""); if (res) { } else { - res = internal_compose_foreign_type(resolved_type); + res = internal_compose_foreign_type(n, resolved_type); } if (res) Printf(ffiType, "%s", res); @@ -762,7 +764,7 @@ add_forward_referenced_type(nn, 0); // tok_name is dangling here, unused. ouch. why? - Printf(ffiType, "%s", get_ffi_type(tok, ""), tok_name); + Printf(ffiType, "%s", get_ffi_type(n, tok, ""), tok_name); } } } @@ -770,10 +772,8 @@ return ffiType; } -String *compose_foreign_type(SwigType *ty, String * /*id*/ = 0) { +String *compose_foreign_type(Node *n, SwigType *ty, String * /*id*/ = 0) { -/* Hash *lookup_res = Swig_typemap_search("ffitype", ty, id, 0); */ - #ifdef ALLEGROCL_TYPE_DEBUG Printf(stderr, "compose_foreign_type: ENTER (%s)...\n ", ty); // Printf(stderr, "compose_foreign_type: ENTER (%s)(%s)...\n ", ty, (id ? id : 0)); @@ -802,7 +802,7 @@ */ SwigType *temp = SwigType_strip_qualifiers(ty); - String *res = internal_compose_foreign_type(temp); + String *res = internal_compose_foreign_type(n, temp); Delete(temp); #ifdef ALLEGROCL_TYPE_DEBUG @@ -1239,7 +1239,7 @@ #ifdef ALLEGROCL_WRAP_DEBUG Printf(stderr, "slot name = '%s' ns = '%s' class-of '%s' and type = '%s'\n", cname, ns, name, childType); #endif - Printf(slotdefs, "(#.(swig-insert-id \"%s\" %s :type :slot :class \"%s\") %s)", cname, ns, name, compose_foreign_type(childType)); + Printf(slotdefs, "(#.(swig-insert-id \"%s\" %s :type :slot :class \"%s\") %s)", cname, ns, name, compose_foreign_type(n, childType)); Delete(ns); if (access && Strcmp(access, "public")) Printf(slotdefs, " ;; %s member", access); @@ -1322,7 +1322,7 @@ String *name; String *sym_name = Getattr(n, "sym:name"); String *type = NewStringf("%s%s", Getattr(n, "decl"), Getattr(n, "type")); - String *lisp_type = compose_foreign_type(type); + String *lisp_type = compose_foreign_type(n, type); Delete(type); Node *in_class = Getattr(n, "allegrocl:typedef:in-class"); @@ -1371,9 +1371,13 @@ name = unnamed ? Getattr(n, "allegrocl:name") : Getattr(n, "sym:name"); SwigType *tmp = NewStringf("enum %s", unnamed ? unnamed : name); - Hash *typemap = Swig_typemap_search("ffitype", tmp, 0, 0); - String *enumtype = Getattr(typemap, "code"); - // enumtype = compose_foreign_type(tmp); + Node *node = NewHash(); + Setattr(node, "type", tmp); + Setfile(node, Getfile(n)); + Setline(node, Getline(n)); + const String *enumtype = Swig_typemap_lookup("ffitype", node, "", 0); + Delete(node); + Delete(tmp); if (name) { @@ -1427,12 +1431,14 @@ name = unnamed ? Getattr(n, "allegrocl:name") : Getattr(n, "sym:name"); SwigType *tmp = NewStringf("enum %s", unnamed ? unnamed : name); - // SwigType *tmp = NewStringf("enum ACL_SWIG_ENUM_NAME"); - Hash *typemap = Swig_typemap_search("ffitype", tmp, 0, 0); - String *enumtype = Getattr(typemap, "code"); + Node *node = NewHash(); + Setattr(node, "type", tmp); + Setfile(node, Getfile(n)); + Setline(node, Getline(n)); + const String *enumtype = Swig_typemap_lookup("ffitype", node, "", 0); + Delete(node); - // enumtype = compose_foreign_type(tmp); Delete(tmp); if (name) { @@ -1979,14 +1985,16 @@ return 0; } -String *get_lisp_type(SwigType *ty, const_String_or_char_ptr name) { - Hash *typemap = Swig_typemap_search("lisptype", ty, name, 0); - if (typemap) { - String *typespec = Getattr(typemap, "code"); - return NewString(typespec); - } else { - return NewString(""); - } +String *get_lisp_type(Node *n, SwigType *ty, const_String_or_char_ptr name) { + Node *node = NewHash(); + Setattr(node, "type", ty); + Setattr(node, "name", name); + Setfile(node, Getfile(n)); + Setline(node, Getline(n)); + const String *tm = Swig_typemap_lookup("lisptype", node, "", 0); + Delete(node); + + return tm ? NewString(tm) : NewString(""); } Node *parent_node_skipping_extends(Node *n) { @@ -2274,18 +2282,21 @@ return SWIG_OK; } -String *dispatching_type(Parm *p) { +String *dispatching_type(Node *n, Parm *p) { String *result = 0; String *parsed = Getattr(p, "type"); //Swig_cparse_type(Getattr(p,"tmap:ctype")); String *cl_t = SwigType_typedef_resolve_all(parsed); - Hash *typemap = Swig_typemap_search("lispclass", parsed, Getattr(p, "name"), 0); - // Printf(stderr,"inspecting type '%s' for class\n", parsed); - // Printf(stderr," cfcocr = '%s' res_all = '%s'\n", - // class_from_class_or_class_ref(parsed), cl_t); - if (typemap) { - result = Copy(Getattr(typemap, "code")); + Node *node = NewHash(); + Setattr(node, "type", parsed); + Setfile(node, Getfile(n)); + Setline(node, Getline(n)); + const String *tm = Swig_typemap_lookup("lispclass", node, Getattr(p, "name"), 0); + Delete(node); + + if (tm) { + result = Copy(tm); } else { String *lookup_type = class_from_class_or_class_ref(parsed); if (lookup_type) @@ -2305,24 +2316,6 @@ return result; } -String *defmethod_lambda_list(Node *overload) { - String *result = NewString(""); - - ParmList *parms = Getattr(overload, "wrap:parms"); - Parm *p; - int a; - - for (a = 0, p = parms; p; p = nextSibling(p), ++a) { - if (a != 0) - Printf(result, " "); - Printf(result, "(arg%d ", a); - Printf(result, "%s", dispatching_type(p)); - Printf(result, ")"); - } - - return result; -} - int ALLEGROCL::emit_dispatch_defun(Node *n) { #ifdef ALLEGROCL_WRAP_DEBUG Printf(stderr, "emit_dispatch_defun: ENTER... "); @@ -2429,9 +2422,9 @@ String *argname = NewStringf("PARM%d_%s", largnum, Getattr(p, "name")); // Printf(stderr,"%s\n", Getattr(p,"tmap:lin")); - String *ffitype = compose_foreign_type(argtype, Getattr(p,"name")); + String *ffitype = compose_foreign_type(n, argtype, Getattr(p,"name")); String *deref_ffitype = dereference_ffitype(ffitype); - String *lisptype = get_lisp_type(parmtype, Getattr(p, "name")); + String *lisptype = get_lisp_type(n, parmtype, Getattr(p, "name")); #ifdef ALLEGROCL_DEBUG Printf(stderr, "lisptype of '%s' '%s' = '%s'\n", parmtype, @@ -2454,7 +2447,7 @@ Replaceall(wrap->code, "$body", parm_code); } - String *dispatchtype = Getattr(n, "sym:overloaded") ? dispatching_type(p) : NewString(""); + String *dispatchtype = Getattr(n, "sym:overloaded") ? dispatching_type(n, p) : NewString(""); // if this parameter has been removed from the C/++ wrapper // it shouldn't be in the lisp wrapper either. @@ -2485,13 +2478,13 @@ SwigType *parsed = Swig_cparse_type(Getattr(n, "tmap:ctype")); // SwigType *cl_t = SwigType_typedef_resolve_all(parsed); SwigType *cl_t = class_from_class_or_class_ref(parsed); - String *out_ffitype = compose_foreign_type(parsed); + String *out_ffitype = compose_foreign_type(n, parsed); String *deref_out_ffitype; String *out_temp = Copy(parsed); if (SwigType_ispointer(out_temp)) { SwigType_pop(out_temp); - deref_out_ffitype = compose_foreign_type(out_temp); + deref_out_ffitype = compose_foreign_type(n, out_temp); } else { deref_out_ffitype = Copy(out_ffitype); } @@ -2547,7 +2540,7 @@ ///////////////////////////////////////////////////// // Lisp foreign call return type and optimizations // ///////////////////////////////////////////////////// - Printf(fcl, " (:returning (%s %s)", compose_foreign_type(result_type), get_lisp_type(Getattr(n, "type"), "result")); + Printf(fcl, " (:returning (%s %s)", compose_foreign_type(n, result_type), get_lisp_type(n, Getattr(n, "type"), "result")); for (Iterator option = First(n); option.item; option = Next(option)) { if (Strncmp("feature:ffargs:", option.key, 15)) @@ -2926,10 +2919,6 @@ Printf(f_runtime, "EXPORT %s %s;\n%s %s = %s%s;\n", ctype, mangled_name, ctype, mangled_name, (pointer_added ? "&" : ""), name); Printf(f_cl, "(swig-defvar \"%s\" :type %s)\n", mangled_name, ((SwigType_isconst(type)) ? ":constant" : ":variable")); - /* - Printf(f_runtime, "// swigtype: %s\n", SwigType_typedef_resolve_all(Getattr(n,"type"))); - Printf(f_runtime, "// vwrap: %s\n", compose_foreign_type(SwigType_strip_qualifiers(Copy(rtype)))); - */ Printf(stderr,"***\n"); Delete(mangled_name); @@ -2971,7 +2960,7 @@ SwigType *typedef_type = Getattr(n,"type"); // has the side-effect of noting any implicit // template instantiations in type. - String *ff_type = compose_foreign_type(typedef_type); + String *ff_type = compose_foreign_type(n, typedef_type); String *sym_name = Getattr(n, "sym:name"); @@ -3132,7 +3121,7 @@ Printf(stderr, "looking at child '%x' of type '%s'\n", c, childType); #endif if (!SwigType_isfunction(childType)) - Delete(compose_foreign_type(childType)); + Delete(compose_foreign_type(n, childType)); Delete(childType); } Modified: branches/gsoc2009-sploving/Source/Modules/cffi.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/cffi.cxx 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Source/Modules/cffi.cxx 2009-07-18 23:45:53 UTC (rev 11423) @@ -819,21 +819,24 @@ // Getattr(c, "type")); // SWIG_exit(EXIT_FAILURE); } else { - SwigType *childType = NewStringf("%s%s", Getattr(c, "decl"), - Getattr(c, "type")); + SwigType *childType = NewStringf("%s%s", Getattr(c, "decl"), Getattr(c, "type")); - Hash *typemap = Swig_typemap_search("cin", childType, "", 0); - String *typespec = NewString(""); - if (typemap) { - typespec = NewString(Getattr(typemap, "code")); - } + Node *node = NewHash(); + Setattr(node, "type", childType); + Setfile(node, Getfile(n)); + Setline(node, Getline(n)); + const String *tm = Swig_typemap_lookup("cin", node, "", 0); + String *typespec = tm ? NewString(tm) : NewString(""); + String *slot_name = lispify_name(c, Getattr(c, "sym:name"), "'slotname"); if (Strcmp(slot_name, "t") == 0 || Strcmp(slot_name, "T") == 0) - slot_name = NewStringf("t_var"); + slot_name = NewStringf("t_var"); Printf(f_cl, "\n\t(%s %s)", slot_name, typespec); + Delete(node); + Delete(childType); Delete(typespec); } } Modified: branches/gsoc2009-sploving/Source/Modules/clisp.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/clisp.cxx 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Source/Modules/clisp.cxx 2009-07-18 23:45:53 UTC (rev 11423) @@ -25,7 +25,7 @@ virtual int typedefHandler(Node *n); List *entries; private: - String *get_ffi_type(SwigType *ty); + String *get_ffi_type(Node *n, SwigType *ty); String *convert_literal(String *num_param, String *type); String *strip_parens(String *string); int extern_all_flag; @@ -167,7 +167,7 @@ String *argname = Getattr(p, "name"); // SwigType *argtype; - String *ffitype = get_ffi_type(Getattr(p, "type")); + String *ffitype = get_ffi_type(n, Getattr(p, "type")); int tempargname = 0; @@ -190,7 +190,7 @@ if (ParmList_len(pl) != 0) { Printf(f_cl, ")\n"); /* finish arg list */ } - String *ffitype = get_ffi_type(Getattr(n, "type")); + String *ffitype = get_ffi_type(n, Getattr(n, "type")); if (Strcmp(ffitype, "NIL")) { //when return type is not nil Printf(f_cl, "\t(:return-type %s)\n", ffitype); } @@ -222,7 +222,7 @@ return SWIG_OK; String *var_name = Getattr(n, "sym:name"); - String *lisp_type = get_ffi_type(Getattr(n, "type")); + String *lisp_type = get_ffi_type(n, Getattr(n, "type")); Printf(f_cl, "\n(ffi:def-c-var %s\n (:name \"%s\")\n (:type %s)\n", var_name, var_name, lisp_type); Printf(f_cl, "\t(:library +library-name+))\n"); Append(entries, var_name); @@ -234,7 +234,7 @@ int CLISP::typedefHandler(Node *n) { if (generate_typedef_flag) { is_function = 0; - Printf(f_cl, "\n(ffi:def-c-type %s %s)\n", Getattr(n, "name"), get_ffi_type(Getattr(n, "type"))); + Printf(f_cl, "\n(ffi:def-c-type %s %s)\n", Getattr(n, "name"), get_ffi_type(n, Getattr(n, "type"))); } return Language::typedefHandler(n); @@ -290,7 +290,7 @@ String *temp = Copy(Getattr(c, "decl")); Append(temp, Getattr(c, "type")); //appending type to the end, otherwise wrong type - String *lisp_type = get_ffi_type(temp); + String *lisp_type = get_ffi_type(n, temp); Delete(temp); String *slot_name = Getattr(c, "sym:name"); @@ -371,15 +371,20 @@ return res; } -String *CLISP::get_ffi_type(SwigType *ty) { - Hash *typemap = Swig_typemap_search("in", ty, "", 0); - if (typemap) { - String *typespec = Getattr(typemap, "code"); - return NewString(typespec); +String *CLISP::get_ffi_type(Node *n, SwigType *ty) { + Node *node = NewHash(); + Setattr(node, "type", ty); + Setfile(node, Getfile(n)); + Setline(node, Getline(n)); + const String *tm = Swig_typemap_lookup("in", node, "", 0); + Delete(node); + + if (tm) { + return NewString(tm); } else if (SwigType_ispointer(ty)) { SwigType *cp = Copy(ty); SwigType_del_pointer(cp); - String *inner_type = get_ffi_type(cp); + String *inner_type = get_ffi_type(n, cp); if (SwigType_isfunction(cp)) { return inner_type; @@ -409,12 +414,12 @@ Delete(array_dim); SwigType_del_array(cp); SwigType_add_pointer(cp); - String *str = get_ffi_type(cp); + String *str = get_ffi_type(n, cp); Delete(cp); return str; } else { SwigType_pop_arrays(cp); - String *inner_type = get_ffi_type(cp); + String *inner_type = get_ffi_type(n, cp); Delete(cp); int ndim = SwigType_array_ndim(ty); @@ -455,7 +460,7 @@ for (Parm *p = pl; p; p = nextSibling(p), argnum++) { String *argname = Getattr(p, "name"); SwigType *argtype = Getattr(p, "type"); - String *ffitype = get_ffi_type(argtype); + String *ffitype = get_ffi_type(n, argtype); int tempargname = 0; @@ -475,7 +480,7 @@ if (ParmList_len(pl) != 0) { Printf(args, ")\n"); /* finish arg list */ } - String *ffitype = get_ffi_type(cp); + String *ffitype = get_ffi_type(n, cp); String *str = NewStringf("(ffi:c-function %s \t\t\t\t(:return-type %s))", args, ffitype); Delete(fn); Delete(args); Modified: branches/gsoc2009-sploving/Source/Modules/csharp.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/csharp.cxx 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Source/Modules/csharp.cxx 2009-07-18 23:45:53 UTC (rev 11423) @@ -1115,16 +1115,16 @@ // Wrap (non-anonymous) C/C++ enum within a typesafe, typeunsafe or proper C# enum // Pure C# baseclass and interfaces - const String *pure_baseclass = typemapLookup("csbase", typemap_lookup_type, WARN_NONE); - const String *pure_interfaces = typemapLookup("csinterfaces", typemap_lookup_type, WARN_NONE); + const String *pure_baseclass = typemapLookup(n, "csbase", typemap_lookup_type, WARN_NONE); + const String *pure_interfaces = typemapLookup(n, "csinterfaces", typemap_lookup_type, WARN_NONE); // Class attributes - const String *csattributes = typemapLookup("csattributes", typemap_lookup_type, WARN_NONE); + const String *csattributes = typemapLookup(n, "csattributes", typemap_lookup_type, WARN_NONE); if (csattributes && *Char(csattributes)) Printf(enum_code, "%s\n", csattributes); // Emit the enum - Printv(enum_code, typemapLookup("csclassmodifiers", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CLASSMOD_UNDEF), // Class modifiers (enum modifiers really) + Printv(enum_code, typemapLookup(n, "csclassmodifiers", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CLASSMOD_UNDEF), // Class modifiers (enum modifiers really) " ", symname, (*Char(pure_baseclass) || *Char(pure_interfaces)) ? " : " : "", pure_baseclass, ((*Char(pure_baseclass)) && *Char(pure_interfaces)) ? // Interfaces ", " : "", pure_interfaces, " {\n", NIL); } else { @@ -1140,8 +1140,8 @@ // Wrap (non-anonymous) C/C++ enum within a typesafe, typeunsafe or proper C# enum // Finish the enum declaration // Typemaps are used to generate the enum definition in a similar manner to proxy classes. - Printv(enum_code, (enum_feature == ProperEnum) ? "\n" : typemapLookup("csbody", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class - typemapLookup("cscode", typemap_lookup_type, WARN_NONE), // extra C# code + Printv(enum_code, (enum_feature == ProperEnum) ? "\n" : typemapLookup(n, "csbody", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class + typemapLookup(n, "cscode", typemap_lookup_type, WARN_NONE), // extra C# code "}", NIL); Replaceall(enum_code, "$csclassname", symname); @@ -1177,7 +1177,7 @@ addOpenNamespace(namespce, f_enum); - Printv(f_enum, typemapLookup("csimports", typemap_lookup_type, WARN_NONE), // Import statements + Printv(f_enum, typemapLookup(n, "csimports", typemap_lookup_type, WARN_NONE), // Import statements "\n", enum_code, "\n", NIL); addCloseNamespace(namespce, f_enum); @@ -1243,7 +1243,7 @@ // Wrap C/C++ enums with constant integers or use the typesafe enum pattern const String *parent_name = Getattr(parentNode(n), "name"); String *typemap_lookup_type = parent_name ? Copy(parent_name) : NewString("int"); - const String *tm = typemapLookup("cstype", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSTYPE_UNDEF); + const String *tm = typemapLookup(n, "cstype", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSTYPE_UNDEF); String *return_type = Copy(tm); Delete(typemap_lookup_type); typemap_lookup_type = NULL; @@ -1490,12 +1490,12 @@ String *c_baseclass = NULL; String *baseclass = NULL; String *c_baseclassname = NULL; - String *typemap_lookup_type = Getattr(n, "classtypeobj"); + SwigType *typemap_lookup_type = Getattr(n, "classtypeobj"); bool feature_director = Swig_directorclass(n) ? true : false; // Inheritance from pure C# classes Node *attributes = NewHash(); - const String *pure_baseclass = typemapLookup("csbase", typemap_lookup_type, WARN_NONE, attributes); + const String *pure_baseclass = typemapLookup(n, "csbase", typemap_lookup_type, WARN_NONE, attributes); bool purebase_replace = GetFlag(attributes, "tmap:csbase:replace") ? true : false; bool purebase_notderived = GetFlag(attributes, "tmap:csbase:notderived") ? true : false; Delete(attributes); @@ -1549,21 +1549,21 @@ } // Pure C# interfaces - const String *pure_interfaces = typemapLookup(derived ? "csinterfaces_derived" : "csinterfaces", typemap_lookup_type, WARN_NONE); + const String *pure_interfaces = typemapLookup(n, derived ? "csinterfaces_derived" : "csinterfaces", typemap_lookup_type, WARN_NONE); // Start writing the proxy class - Printv(proxy_class_def, typemapLookup("csimports", typemap_lookup_type, WARN_NONE), // Import statements + Printv(proxy_class_def, typemapLookup(n, "csimports", typemap_lookup_type, WARN_NONE), // Import statements "\n", NIL); // Class attributes - const String *csattributes = typemapLookup("csattributes", typemap_lookup_type, WARN_NONE); + const String *csattributes = typemapLookup(n, "csattributes", typemap_lookup_type, WARN_NONE); if (csattributes && *Char(csattributes)) Printf(proxy_class_def, "%s\n", csattributes); - Printv(proxy_class_def, typemapLookup("csclassmodifiers", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CLASSMOD_UNDEF), // Class modifiers + Printv(proxy_class_def, typemapLookup(n, "csclassmodifiers", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CLASSMOD_UNDEF), // Class modifiers " $csclassname", // Class name and base class (*Char(wanted_base) || *Char(pure_interfaces)) ? " : " : "", wanted_base, (*Char(wanted_base) && *Char(pure_interfaces)) ? // Interfaces - ", " : "", pure_interfaces, " {", derived ? typemapLookup("csbody_derived", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF) : // main body of class - typemapLookup("csbody", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class + ", " : "", pure_interfaces, " {", derived ? typemapLookup(n, "csbody_derived", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF) : // main body of class + typemapLookup(n, "csbody", typemap_lookup_type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class NIL); // C++ destructor is wrapped by the Dispose method @@ -1574,11 +1574,11 @@ String *destruct_methodname = NULL; String *destruct_methodmodifiers = NULL; if (derived) { - tm = typemapLookup("csdestruct_derived", typemap_lookup_type, WARN_NONE, attributes); + tm = typemapLookup(n, "csdestruct_derived", typemap_lookup_type, WARN_NONE, attributes); destruct_methodname = Getattr(attributes, "tmap:csdestruct_derived:methodname"); destruct_methodmodifiers = Getattr(attributes, "tmap:csdestruct_derived:methodmodifiers"); } else { - tm = typemapLookup("csdestruct", typemap_lookup_type, WARN_NONE, attributes); + tm = typemapLookup(n, "csdestruct", typemap_lookup_type, WARN_NONE, attributes); destruct_methodname = Getattr(attributes, "tmap:csdestruct:methodname"); destruct_methodmodifiers = Getattr(attributes, "tmap:csdestruct:methodmodifiers"); } @@ -1595,7 +1595,7 @@ if (tm) { // Finalize method if (*Char(destructor_call)) { - Printv(proxy_class_def, typemapLookup("csfinalize", typemap_lookup_type, WARN_NONE), NIL); + Printv(proxy_class_def, typemapLookup(n, "csfinalize", typemap_lookup_type, WARN_NONE), NIL); } // Dispose method Printv(destruct, tm, NIL); @@ -1690,7 +1690,7 @@ Delete(destruct); // Emit extra user code - Printv(proxy_class_def, typemapLookup("cscode", typemap_lookup_type, WARN_NONE), // extra C# code + Printv(proxy_class_def, typemapLookup(n, "cscode", typemap_lookup_type, WARN_NONE), // extra C# code "\n", NIL); // Substitute various strings into the above template @@ -2355,7 +2355,7 @@ /* Insert the csconstruct typemap, doing the replacement for $directorconnect, as needed */ Hash *attributes = NewHash(); - String *construct_tm = Copy(typemapLookup("csconstruct", Getattr(n, "name"), + String *construct_tm = Copy(typemapLookup(n, "csconstruct", Getattr(n, "name"), WARN_CSHARP_TYPEMAP_CSCONSTRUCT_UNDEF, attributes)); if (construct_tm) { if (!feature_director) { @@ -2972,6 +2972,10 @@ * ----------------------------------------------------------------------------- */ void emitTypeWrapperClass(String *classname, SwigType *type) { + Node *n = NewHash(); + Setfile(n, input_file); + Setline(n, line_number); + String *swigtype = NewString(""); String *filen = NewStringf("%s%s.cs", SWIG_output_directory(), classname); File *f_swigtype = NewFile(filen, "w", SWIG_output_files()); @@ -2989,23 +2993,23 @@ addOpenNamespace(namespce, f_swigtype); // Pure C# baseclass and interfaces - const String *pure_baseclass = typemapLookup("csbase", type, WARN_NONE); - const String *pure_interfaces = typemapLookup("csinterfaces", type, WARN_NONE); + const String *pure_baseclass = typemapLookup(n, "csbase", type, WARN_NONE); + const String *pure_interfaces = typemapLookup(n, "csinterfaces", type, WARN_NONE); // Emit the class - Printv(swigtype, typemapLookup("csimports", type, WARN_NONE), // Import statements + Printv(swigtype, typemapLookup(n, "csimports", type, WARN_NONE), // Import statements "\n", NIL); // Class attributes - const String *csattributes = typemapLookup("csattributes", type, WARN_NONE); + const String *csattributes = typemapLookup(n, "csattributes", type, WARN_NONE); if (csattributes && *Char(csattributes)) Printf(swigtype, "%s\n", csattributes); - Printv(swigtype, typemapLookup("csclassmodifiers", type, WARN_CSHARP_TYPEMAP_CLASSMOD_UNDEF), // Class modifiers + Printv(swigtype, typemapLookup(n, "csclassmodifiers", type, WARN_CSHARP_TYPEMAP_CLASSMOD_UNDEF), // Class modifiers " $csclassname", // Class name and base class (*Char(pure_baseclass) || *Char(pure_interfaces)) ? " : " : "", pure_baseclass, ((*Char(pure_baseclass)) && *Char(pure_interfaces)) ? // Interfaces - ", " : "", pure_interfaces, " {", typemapLookup("csbody", type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class - typemapLookup("cscode", type, WARN_NONE), // extra C# code + ", " : "", pure_interfaces, " {", typemapLookup(n, "csbody", type, WARN_CSHARP_TYPEMAP_CSBODY_UNDEF), // main body of class + typemapLookup(n, "cscode", type, WARN_NONE), // extra C# code "}\n", NIL); Replaceall(swigtype, "$csclassname", classname); @@ -3019,29 +3023,34 @@ Close(f_swigtype); Delete(swigtype); + Delete(n); } /* ----------------------------------------------------------------------------- * typemapLookup() + * n - for input only and must contain info for Getfile(n) and Getline(n) to work + * op - typemap method name + * type - typemap type to lookup + * warning - warning number to issue if no typemaps found + * typemap_attributes - the typemap attributes are attached to this node and will + * also be used for temporary storage if non null + * return is never NULL, unlike Swig_typemap_lookup() * ----------------------------------------------------------------------------- */ - const String *typemapLookup(const String *op, String *type, int warning, Node *typemap_attributes = NULL) { - String *tm = NULL; - const String *code = NULL; - - if ((tm = Swig_typemap_search(op, type, NULL, NULL))) { - code = Getattr(tm, "code"); - if (typemap_attributes) - Swig_typemap_attach_kwargs(tm, op, typemap_attributes); - } - - if (!code) { - code = empty_string; + const String *typemapLookup(Node *n, const_String_or_char_ptr op, SwigType *type, int warning, Node *typemap_attributes = 0) { + Node *node = !typemap_attributes ? NewHash() : typemap_attributes; + Setattr(node, "type", type); + Setfile(node, Getfile(n)); + Setline(node, Getline(n)); + const String *tm = Swig_typemap_lookup(op, node, "", 0); + if (!tm) { + tm = empty_string; if (warning != WARN_NONE) - Swig_warning(warning, input_file, line_number, "No %s typemap defined for %s\n", op, type); + Swig_warning(warning, Getfile(n), Getline(n), "No %s typemap defined for %s\n", op, SwigType_str(type, 0)); } - - return code ? code : empty_string; + if (!typemap_attributes) + Delete(node); + return tm; } /* ----------------------------------------------------------------------------- @@ -3820,7 +3829,7 @@ Node *disconn_attr = NewHash(); String *disconn_methodname = NULL; - disconn_tm = typemapLookup("directordisconnect", full_classname, WARN_NONE, disconn_attr); + disconn_tm = typemapLookup(n, "directordisconnect", full_classname, WARN_NONE, disconn_attr); disconn_methodname = Getattr(disconn_attr, "tmap:directordisconnect:methodname"); Printv(w->code, "}\n", NIL); Modified: branches/gsoc2009-sploving/Source/Modules/java.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/java.cxx 2009-07-18 22:35:03 UTC (rev 11422) +++ branches/gsoc2009-sploving/Source/Modules/java.cxx 2009-07-18 23:45:53 UTC (rev 11423) @@ -1171,11 +1171,11 @@ // Wrap (non-anonymous) C/C++ enum within a typesafe, typeunsafe or proper Java enum // Pure Java baseclass and interfaces - const String *pure_baseclass = typemapLookup("javabase", typemap_lookup_type, WARN_NONE); - const String *pure_interfaces = typemapLookup("javainterfaces", typemap_lookup_type, WARN_NONE); + const String *pure_baseclass = typemapLookup(n, "javabase", typemap_lookup_type, WARN_NONE); + const String *pure_interfaces = typemapLookup(n, "javainterfaces", typemap_lookup_type, WARN_NONE); // Emit the enum - Printv(enum_code, typemapLookup("javaclassmodifiers", typemap_lookup_type, WARN_JAVA_TYPEMAP_CLASSMOD_UNDEF), // Class modifiers (enum modifiers really) + Printv(enum_code, typemapLookup(n, "javaclassmodifiers", typemap_lookup_type, WARN_JAVA_TYPEMAP_CLASSMOD_UNDEF), // Class modifiers (enum modifiers really) " ", symname, *Char(pure_baseclass) ? // Bases " extends " : "", pure_baseclass, *Char(pure_interfaces) ? // Interfaces " implements " : "", pure_interfaces, " {\n", NIL); @@ -1196,8 +1196,8 @@ // Wrap (non-anonymous) C/C++ enum within a typesafe, typeunsafe or proper Java enum // Finish the enum declaration // Typemaps are used to generate the enum definition in a similar manner to proxy classes. - Printv(enum_code, (enum_feature == ProperEnum) ? ";\n" : "", typemapLookup("javabody", typemap_lookup_type, WARN_JAVA_TYPEMAP_JAVABODY_UNDEF), // main body of class - typemapLookup("javacode", typemap_lookup_type, WARN_NONE), // extra Java code + Printv(enum_code, (enum_feature == ProperEnum) ? ";\n" : "", typemapLookup(n, "javabod... [truncated message content] |
From: <spl...@us...> - 2009-07-27 02:57:16
|
Revision: 11457 http://swig.svn.sourceforge.net/swig/?rev=11457&view=rev Author: sploving Date: 2009-07-27 02:57:09 +0000 (Mon, 27 Jul 2009) Log Message: ----------- adding struct example Modified Paths: -------------- branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Examples/octave/funcptr/runme.m branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/scilab/struct/ branches/gsoc2009-sploving/Examples/scilab/struct/Makefile branches/gsoc2009-sploving/Examples/scilab/struct/example.i branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci Modified: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-07-26 23:37:50 UTC (rev 11456) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-07-27 02:57:09 UTC (rev 11457) @@ -26,6 +26,7 @@ <li><a href="#Scilab_nn11">Constants</a> <li><a href="#Scilab_nn12">Enums</a> <li><a href="#Octave_nn13">Pointers</a> +<li><a href="#Octave_nn14">Structs</a> </ul> </ul> </div> @@ -355,5 +356,29 @@ we only need a real value instead. </p> +<H3><a name="Octave_nn14"></a>27.3.6 Structs</H3> +<p> + SWIG creates a set of accessor functions when encountering a structure or union. For example: +</p> + <div class="code"><pre>%module example +%inline %{ +typedef struct { + int x; +} Foo; +%} +</pre></div> +<p> When wrappered, it would generate two main function: Foo_x_set(), which set the data value of the structrure and Foo_x_get() which could obtain the value of the structrure. Run it in Scilab: +</p> + <div class="targetlang"><pre> +a=new_Foo(); +Foo_x_set(a,100); +Foo_x_get(a) +ans = + + 100 +</pre></div> + + + Modified: branches/gsoc2009-sploving/Examples/octave/funcptr/runme.m =================================================================== --- branches/gsoc2009-sploving/Examples/octave/funcptr/runme.m 2009-07-26 23:37:50 UTC (rev 11456) +++ branches/gsoc2009-sploving/Examples/octave/funcptr/runme.m 2009-07-27 02:57:09 UTC (rev 11457) @@ -1,3 +1,4 @@ +#!/usr/bin/octave # file: runme.m example Added: branches/gsoc2009-sploving/Examples/scilab/struct/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/struct/Makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/struct/Makefile 2009-07-27 02:57:09 UTC (rev 11457) @@ -0,0 +1,17 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.i +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c *_wrap.c + +check: all + $(MAKE) -f $(TOP)/Makefile scilab_run Added: branches/gsoc2009-sploving/Examples/scilab/struct/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/struct/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/struct/example.i 2009-07-27 02:57:09 UTC (rev 11457) @@ -0,0 +1,11 @@ +%module example + +%rename(Bar) Foo; + +%inline %{ +typedef struct { + int x; +} Foo; + +%} + Added: branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci 2009-07-27 02:57:09 UTC (rev 11457) @@ -0,0 +1,14 @@ +// builder the *.so +exec builder.sce + +//loader the *.so +exec loader.sce + +//create a struct +a=new_Bar(); +Bar_x_set(a,100); +Bar_x_get(a) + +exit + + Modified: branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg 2009-07-26 23:37:50 UTC (rev 11456) +++ branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg 2009-07-27 02:57:09 UTC (rev 11457) @@ -1,7 +1,7 @@ %insert(runtime) %{ void SWIG_Error(int code, const char *msg) { - Scierror(code,_("%s\n"),msg); + Scierror(code, _("%s\n"), msg); } #define SWIG_contract_assert(expr, msg) if (!(expr)) { SWIG_Error(999, msg); } else Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-26 23:37:50 UTC (rev 11456) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-27 02:57:09 UTC (rev 11457) @@ -318,7 +318,7 @@ } %typemap(in) SWIGTYPE *(int *piAddrVar, int iRows, int iCols) { - $&1_ltype _piData=($&1_ltype)0; + $&1_ltype _piData = ($&1_ltype)0; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -328,6 +328,7 @@ getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); $1 = ($1_ltype)*_piData; } + %typemap(in) SWIGTYPE { } @@ -338,28 +339,34 @@ /* Basic C types */ %typemap(out) signed char (int iRowsOut, int iColsOut) { - char temp; - temp = (char)($result); iRowsOut = 1; iColsOut = 1; - createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp); + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum) = iVarOut; } -%typemap(out) short (int iRowsOut, int iColsOut), - unsigned char (int iRowsOut, int iColsOut) { - short temp; - temp = (short)($result); +%typemap(out) unsigned char (int iRowsOut, int iColsOut) { iRowsOut = 1; iColsOut = 1; - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp); + createMatrixOfUnsignedInteger8(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum) = iVarOut; } +%typemap(out) short (int iRowsOut, int iColsOut) { + iRowsOut = 1; + iColsOut = 1; + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &$result); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(out) unsigned short (int iRowsOut, int iColsOut) { + iRowsOut = 1; + iColsOut = 1; + createMatrixOfUnsignedInteger16(iVarOut, iRowsOut, iColsOut, &$result); + LhsVar(iOutNum) = iVarOut; +} + %typemap(out) int (int iRowsOut, int iColsOut), - unsigned int (int iRowsOut, int iColsOut), - unsigned short (int iRowsOut, int iColsOut), - unsigned long (int iRowsOut, int iColsOut), long (int iRowsOut, int iColsOut) { int temp; temp = (int)($result); @@ -369,6 +376,16 @@ LhsVar(iOutNum) = iVarOut; } +%typemap(out) unsigned int (int iRowsOut, int iColsOut), + unsigned long (int iRowsOut, int iColsOut) { + int temp; + temp = (int)($result); + iRowsOut = 1; + iColsOut = 1; + createMatrixOfUnsignedInteger32(iVarOut, iRowsOut, iColsOut, &temp); + LhsVar(iOutNum) = iVarOut; +} + %typemap(out) double (int iRowsOut, int iColsOut), float (int iRowsOut, int iColsOut) { double temp; @@ -436,7 +453,7 @@ iVarOut++; } -%typemap(out) char *(int iRowsOut, int iColsOut){ +%typemap(out) char *(int iRowsOut, int iColsOut) { iRowsOut = 1; iColsOut = 1; createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result)); @@ -627,27 +644,33 @@ LhsVar(iOutNum) = iVarOut; } +%typemap(varout,noblock=1) unsigned char { + createMatrixOfUnsignedInteger8(iVarOut, iRowsOut, iColsOut, &$result); + LhsVar(iOutNum) = iVarOut; +} + %typemap(varout,noblock=1) short { createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum) = iVarOut; } -%typemap(varout,noblock=1) unsigned char { - short temp; - temp = $result; - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp); +%typemap(varout,noblock=1) unsigned short { + createMatrixOfUnsignedInteger16(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) int, - unsigned int, - unsigned short, - unsigned long, long { createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum) = iVarOut; } +%typemap(varout,noblock=1) unsigned int, + unsigned long { + createMatrixOfUnsignedInteger32(iVarOut, iRowsOut, iColsOut, &$result); + LhsVar(iOutNum) = iVarOut; +} + %typemap(varout,noblock=1) double { createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result); LhsVar(iOutNum) = iVarOut; Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-07-26 23:37:50 UTC (rev 11456) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-07-27 02:57:09 UTC (rev 11457) @@ -306,12 +306,12 @@ else { flag = 1; } - Printf(f->def, "CheckRhs(%d,%d);\n",num_required,num_required); - Printf(f->def, "CheckLhs(%d,%d);\n",out_required,out_required); + Printf(f->def, "CheckRhs(%d, %d);\n",num_required,num_required); + Printf(f->def, "CheckLhs(%d, %d);\n",out_required,out_required); /* Insert the order of output parameters*/ if(flag) - Printf(f->def, "\nint iOutNum=1;\nint iVarOut=Rhs+1;"); + Printf(f->def, "\nint iOutNum = 1;\nint iVarOut = Rhs + 1;"); /* Finish the the code for the function */ Printf(f->code, "return 0;\n"); @@ -404,8 +404,8 @@ Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len){\n", NIL); /* Check the number of input and output */ - Printf(getf->def, "CheckRhs(0,0);\n"); - Printf(getf->def, "CheckLhs(1,1);\n"); + Printf(getf->def, "CheckRhs(0, 0);\n"); + Printf(getf->def, "CheckLhs(1, 1);\n"); /* Insert the order of output parameters*/ Printf(getf->def, "\nint iOutNum=1;\nint iVarOut=Rhs+1;"); @@ -533,7 +533,7 @@ value = Getattr(n, "value"); /* write into the code string */ - Printf(f_example_code, "%s.%s=%s;\n", parentName, iname, value); + Printf(f_example_code, "%s.%s = %s;\n", parentName, iname, value); return SWIG_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-07-30 09:41:24
|
Revision: 11478 http://swig.svn.sourceforge.net/swig/?rev=11478&view=rev Author: sploving Date: 2009-07-30 09:41:11 +0000 (Thu, 30 Jul 2009) Log Message: ----------- add array example Modified Paths: -------------- branches/gsoc2009-sploving/Examples/scilab/pointer/example.i branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci branches/gsoc2009-sploving/Examples/scilab/variables/example.c branches/gsoc2009-sploving/Examples/scilab/variables/example.i branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/scilab/funcptr/ branches/gsoc2009-sploving/Examples/scilab/funcptr/Makefile branches/gsoc2009-sploving/Examples/scilab/funcptr/example.c branches/gsoc2009-sploving/Examples/scilab/funcptr/example.h branches/gsoc2009-sploving/Examples/scilab/funcptr/example.i branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci branches/gsoc2009-sploving/Examples/scilab/matrix/ branches/gsoc2009-sploving/Examples/scilab/matrix/Makefile branches/gsoc2009-sploving/Examples/scilab/matrix/example.c branches/gsoc2009-sploving/Examples/scilab/matrix/example.i branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci Added: branches/gsoc2009-sploving/Examples/scilab/funcptr/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/funcptr/Makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/funcptr/Makefile 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,17 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c *_wrap.c + +check: all + $(MAKE) -f $(TOP)/Makefile scilab_run Added: branches/gsoc2009-sploving/Examples/scilab/funcptr/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/funcptr/example.c (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/funcptr/example.c 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,20 @@ +/* File : example.c */ + +int do_op(int a, int b, int (*op)(int,int)) { + return (*op)(a,b); +} + +int add(int a, int b) { + return a+b; +} + +int sub(int a, int b) { + return a-b; +} + +int mul(int a, int b) { + return a*b; +} + +int (*funcvar)(int,int) = add; + Added: branches/gsoc2009-sploving/Examples/scilab/funcptr/example.h =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/funcptr/example.h (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/funcptr/example.h 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,9 @@ +/* file: example.h */ + +extern int do_op(int,int, int (*op)(int,int)); +extern int add(int,int); +extern int sub(int,int); +extern int mul(int,int); + +extern int (*funcvar)(int,int); + Added: branches/gsoc2009-sploving/Examples/scilab/funcptr/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/funcptr/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/funcptr/example.i 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,11 @@ +/* File : example.i */ +%module example +%{ +#include "example.h" +%} + +/* Wrap a function taking a pointer to a function */ +extern int do_op(int a, int b, int (*op)(int, int)); + +extern int (*funcvar)(int,int); + Added: branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,20 @@ +// builder the *.so +exec builder.sce; + +// loader the *.so +exec loader.sce; + +a = 37 +b = 42 + +// Now call our C function with a bunch of callbacks + +printf("Trying some C callback functions\n"); +printf(" a = %i\n", a); +printf(" b = %i\n", b); +printf(" ADD(a,b) = %i\n", do_op(a,b,funcvar_get())); + +exit + + + Added: branches/gsoc2009-sploving/Examples/scilab/matrix/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/matrix/Makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/matrix/Makefile 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,17 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab + + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c *_wrap.c + +check: all + $(MAKE) -f $(TOP)/Makefile scilab_run Added: branches/gsoc2009-sploving/Examples/scilab/matrix/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/matrix/example.c (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/matrix/example.c 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,61 @@ +/* FILE : matrix.c : some simple 4x4 matrix operations */ +#include <stdlib.h> +#include <stdio.h> + +double **new_matrix() { + + int i; + double **M; + + M = (double **) malloc(4*sizeof(double *)); + M[0] = (double *) malloc(16*sizeof(double)); + + for (i = 0; i < 4; i++) { + M[i] = M[0] + 4*i; + } + return M; +} + +void destroy_matrix(double **M) { + + free(M[0]); + free(M); + +} + +void print_matrix(double **M) { + + int i,j; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + printf("%10g ", M[i][j]); + } + printf("\n"); + } + +} + +void mat_mult(double **m1, double **m2, double **m3) { + + int i,j,k; + double temp[4][4]; + + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) { + temp[i][j] = 0; + for (k = 0; k < 4; k++) + temp[i][j] += m1[i][k]*m2[k][j]; + } + + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) + m3[i][j] = temp[i][j]; +} + + + + + + + Added: branches/gsoc2009-sploving/Examples/scilab/matrix/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/matrix/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/matrix/example.i 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,36 @@ +%module example +// FILE : matrix.i + +%{ + +void set_m(double **M, int i, int j, double val) { + M[i][j] = val; +} + +double get_m(double **M, int i, int j) { + return M[i][j]; +} +%} + +%inline { +/*** Matrix Operations ***/ + +extern double **new_matrix(); +/* Creates a new matrix and returns a pointer to it */ + +extern void destroy_matrix(double **M); +/* Destroys the matrix M */ + +extern void print_matrix(double **M); +/* Prints out the matrix M */ + +extern void set_m(double **M, int i, int j, double val); +/* Sets M[i][j] = val*/ + +extern double get_m(double **M, int i, int j); +/* Returns M[i][j] */ + +extern void mat_mult(double **a, double **b, double **c); +/* Multiplies matrix a by b and places the result in c*/ + +} Added: branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci 2009-07-30 09:41:11 UTC (rev 11478) @@ -0,0 +1,41 @@ +// builder the *.so +exec builder.sce + +// loader the *.so +exec loader.sce + +// creat a new matrix +x = new_matrix(); +for i = 0 : 3; + for j = 0 : 3; + set_m(x, i, j, i+j); + end; +end; + +// print the matrix +print_matrix(x); + +// another matrix +y = new_matrix(); + for i = 0 : 3; + for j = 0 : 3; + set_m(y, i, j, i-j); + end; + end; + +// print the matrix +print_matrix(y); + +// mat_mult the two matrix, and the result is stored in a new matrix +z = new_matrix(); + +mat_mult(x, y, z); + +print_matrix(z); + +//destroy the matrix +destroy_matrix(x); +destroy_matrix(y); +destroy_matrix(z); + +exit Modified: branches/gsoc2009-sploving/Examples/scilab/pointer/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/example.i 2009-07-30 08:50:56 UTC (rev 11477) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/example.i 2009-07-30 09:41:11 UTC (rev 11478) @@ -10,10 +10,10 @@ /* This example illustrates a couple of different techniques for manipulating C pointers */ -/* First we'll use the pointer library +/* First we'll use the pointer library */ extern void add(int *x, int *y, int *result); %include cpointer.i -%pointer_functions(int, intp);*/ +%pointer_functions(int, intp); /* Next we'll use some typemaps */ Modified: branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-07-30 08:50:56 UTC (rev 11477) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-07-30 09:41:11 UTC (rev 11478) @@ -1,9 +1,31 @@ // builder the *.so exec builder.sce -//loader the *.so +// loader the *.so exec loader.sce +// First create some objects using the pointer library. +printf("Testing the pointer library\n"); +a = new_intp(); +b = new_intp(); +c = new_intp(); +intp_assign(a,37); +intp_assign(b,42); + +a,b,c + +// Call the add() function with some pointers +add(a,b,c); + +// Now get the result +r = intp_value(c); +printf(" 37 + 42 = %i\n",r); + +// Clean up the pointers +delete_intp(a); +delete_intp(b); +delete_intp(c); + //Now try the typemap library //This should be much easier. Now how it is no longer //necessary to manufacture pointers. Modified: branches/gsoc2009-sploving/Examples/scilab/variables/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-07-30 08:50:56 UTC (rev 11477) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.c 2009-07-30 09:41:11 UTC (rev 11478) @@ -9,7 +9,7 @@ #include <stdio.h> #include <stdlib.h> -#include "sciprint.h" +#include "example.h" int ivar = 0; short svar = 0; @@ -22,15 +22,20 @@ char cvar = 0; float fvar = 0; double dvar = 0; -char *strvar=0; +char *strvar = 0; +const char cstrvar[] = "Goodbye"; +int *iptrvar = 0; char name[5] = "Dave"; -double *Foo1; -double *Foo2; -int *pivar; -short *psvar; -char **foo; +char path[256] = "/home/beazley"; +/* Global variables involving a structure */ +Point *ptptr = 0; +Point pt = { 10, 20 }; + +/* A variable that we will make read-only in the interface */ +int status = 1; + /* A debugging function to print out their values */ void print_vars() { @@ -45,9 +50,46 @@ printf("fvar = %g\n", fvar); printf("dvar = %g\n", dvar); printf("cvar = %c\n", cvar); - printf("strvar = %s\n",strvar); + printf("strvar = %s\n", strvar ? strvar : "(null)"); + printf("cstrvar = %s\n", cstrvar ? cstrvar : "(null)"); + printf("iptrvar = %p\n", iptrvar); printf("name = %c%c%c%c%c\n", name[0],name[1],name[2],name[3],name[4]); + //printf("ptptr = %p %s\n", ptptr, Point_print( ptptr ) ); + printf("pt = (%d, %d)\n", pt.x, pt.y); + printf("status = %d\n", status); } +/* A function to create an integer (to test iptrvar) */ +int *new_int(int value) { + int *ip = (int *) malloc(sizeof(int)); + *ip = value; + return ip; +} +int value_int(int *value) { + return *value; +} + +/* A function to create a point */ + +Point *new_Point(int x, int y) { + Point *p = (Point *) malloc(sizeof(Point)); + p->x = x; + p->y = y; + return p; +} + +char * Point_print(Point *p) { + static char buffer[256]; + if (p) { + sprintf(buffer,"(%d,%d)", p->x,p->y); + } else { + sprintf(buffer,"null"); + } + return buffer; +} + +void pt_print() { + printf("(%d, %d)\n", pt.x, pt.y); +} Modified: branches/gsoc2009-sploving/Examples/scilab/variables/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/example.i 2009-07-30 08:50:56 UTC (rev 11477) +++ branches/gsoc2009-sploving/Examples/scilab/variables/example.i 2009-07-30 09:41:11 UTC (rev 11478) @@ -1,5 +1,8 @@ /* File : example.i */ %module example +%{ +#include "example.h" +%} #pragma SWIG nowarn=SWIGWARN_TYPEMAP_SWIGTYPELEAK @@ -17,17 +20,33 @@ extern float fvar; extern double dvar; extern char *strvar; + // extern const char cstrvar[]; + extern int *iptrvar; extern char name[256]; - extern double *Foo1; - extern double *Foo2; - extern int *pivar; - extern short *psvar; - extern char **foo; + + extern Point *ptptr; + extern Point pt; + %} +/* Some read-only variables */ + +%immutable; + +%inline %{ +extern int status; +extern char path[256]; +%} + +%mutable; + /* Some helper functions to make it easier to test */ %inline %{ extern void print_vars(); +extern int *new_int(int value); +extern Point *new_Point(int x, int y); +extern char *Point_print(Point *p); +extern void pt_print(); %} Modified: branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-07-30 08:50:56 UTC (rev 11477) +++ branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-07-30 09:41:11 UTC (rev 11478) @@ -18,17 +18,10 @@ fvar_set (3.14159); dvar_set (2.1828); strvar_set("Hello World"); -name_set ("Bill"); -Foo1_set([1,2,3;4,5,6]); -Foo2_set([1+2*%i,2+3*%i;3+4*%i,7+8*%i]); -pivar_set(int32([ 1 2 3 4 5; - 6 7 8 9 10; - 11 12 13 14 15])); -psvar_set(int16([ 1 2 3 4 5; - 6 7 8 9 10; - 11 12 13 14 15])); -foo_set(["sample", "strings", "manipulation"; "with","gateway","API"]); +iptrvar= new_int(37); +ptptr = new_Point(37,42); +name_set ("Bill"); // Now print out the values of the variables printf("Variables (values printed from Scilab)\n"); @@ -45,13 +38,10 @@ printf("dvar = %f\n", dvar_get()); printf("cvar = %s\n", cvar_get()); printf("strvar = %s\n", strvar_get()); -printf("name = %s\n", name_get()); -Foo1_get() -Foo2_get() -pivar_get() -psvar_get() -foo_get() +iptrvar +printf("name = %s\n", name_get()); +printf("ptptr = %s\n", Point_print(ptptr)); printf("\nVariables (values printed from C)\n"); print_vars() Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-30 08:50:56 UTC (rev 11477) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-07-30 09:41:11 UTC (rev 11478) @@ -50,67 +50,28 @@ $1 = ($1_ltype)*_pstStrings; } - /* Pointers */ -%typemap(in) signed char *(int *piAddrVar, int iRows, int iCols) { - char *_piData; - int index; +%typemap(in) signed char * (int *piAddrVar), + short * (int *piAddrVar), + unsigned char * (int *piAddrVar), + unsigned short * (int *piAddrVar), + int * (int *piAddrVar), + unsigned int * (int *piAddrVar), + long * (int *piAddrVar), + unsigned long * (int *piAddrVar), + double * (int *piAddrVar), + float * (int *piAddrVar) { + void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + if (getVarType(piAddrVar) != sci_lufact_pointer) { + Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum); } - getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); + getPointer(piAddrVar, &_piData); $1 = ($1_ltype)_piData; } -%typemap(in) short *(int *piAddrVar, int iRows, int iCols), - unsigned char *(int *piAddrVar, int iRows, int iCols) { - short *_piData; - int index; - getVarAddressFromPosition($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - - if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); - } - getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); - $1 = ($1_ltype)_piData; -} - -%typemap(in) unsigned short *(int *piAddrVar, int iRows, int iCols), - int *(int *piAddrVar, int iRows, int iCols), - unsigned int *(int *piAddrVar, int iRows, int iCols), - long *(int *piAddrVar, int iRows, int iCols), - unsigned long *(int *piAddrVar, int iRows, int iCols) { - int *_piData; - int index; - getVarAddressFromPosition($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - - if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); - } - getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); - $1 = ($1_ltype)_piData; -} - -%typemap(in) double *(int *piAddrVar, int iRows, int iCols), - float *(int *piAddrVar, int iRows, int iCols) { - double *_piData; - int index; - getVarAddressFromPosition($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - - if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); - } - getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - $1 = ($1_ltype)_piData; -} - -%typemap(in) char *(int *piAddrVar, int iRows, int iCols){ +%typemap(in) char * (int *piAddrVar, int iRows, int iCols){ char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); @@ -205,8 +166,6 @@ } } - - %typemap(in) char [ANY] (int *piAddrVar, int iRows, int iCols){ char *_pstStrings; int _piLength; @@ -220,7 +179,6 @@ $1 = strdup(_pstStrings); } - /* Arrays */ %typemap(in) signed char [ANY][ANY] (int *piAddrVar, int iRows, int iCols) { char *_piData; @@ -317,20 +275,26 @@ } } -%typemap(in) SWIGTYPE *(int *piAddrVar, int iRows, int iCols) { - $&1_ltype _piData = ($&1_ltype)0; +%typemap(in) SWIGTYPE * (int *piAddrVar) { + void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if (getVarType(piAddrVar) != sci_matrix || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + if (getVarType(piAddrVar) != sci_lufact_pointer) { + Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum); } - getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - $1 = ($1_ltype)*_piData; + getPointer(piAddrVar, &_piData); + $1 = ($1_ltype)_piData; } %typemap(in) SWIGTYPE { + void *_piData = NULL; + getVarAddressFromPosition($argnum, &piAddrVar); + if (getVarType(piAddrVar) != sci_lufact_pointer) { + Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum); + } + getPointer(piAddrVar, &_piData); + $1 = *(($&1_ltype)_piData); } /* ----------------------------------------------------------------------------- @@ -409,48 +373,18 @@ } /* Pointers */ -%typemap(out) signed char *(int iRowsOut, int iColsOut) { - char *temp; - temp = (char *)($result); - iRowsOut = 1; - iColsOut = 1; - createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, temp); - LhsVar(iOutNum) = iVarOut; -} - -%typemap(out) short *(int iRowsOut, int iColsOut), - unsigned char *(int iRowsOut, int iColsOut) { - short *temp; - temp = (short *)($result); - iRowsOut = 1; - iColsOut = 1; - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, temp); - LhsVar(iOutNum) = iVarOut; -} - -%typemap(out) int *(int iRowsOut, int iColsOut), - unsigned int *(int iRowsOut, int iColsOut), - unsigned short *(int iRowsOut, int iColsOut), - unsigned long *(int iRowsOut, int iColsOut), - long *(int iRowsOut, int iColsOut) { - int *temp; - temp = (int *)($result); - iRowsOut = 1; - iColsOut = 1; - createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, temp); - LhsVar(iOutNum) = iVarOut; -} - -%typemap(out) double *, +%typemap(out) signed char *, + short *, + unsigned char *, + unsigned short *, + int *, + unsigned int *, + long *, + unsigned long *, + double *, float * { - double *temp; - temp = (double *)($result); - iRowsOut = 1; - iColsOut = 1; - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, temp); + createPointer(iVarOut, (void *)$result); LhsVar(iOutNum) = iVarOut; - iOutNum++; - iVarOut++; } %typemap(out) char *(int iRowsOut, int iColsOut) { @@ -464,13 +398,16 @@ if ($1) free($1); } -%typemap(out) SWIGTYPE *(int iRowsOut, int iColsOut) { - iRowsOut = 1; - iColsOut = 1; - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result); +%typemap(out) SWIGTYPE * { + createPointer(iVarOut, (void *)$result); LhsVar(iOutNum) = iVarOut; } +%typemap(out) SWIGTYPE { + createPointer(iVarOut, (void *)&$result); + LhsVar(iOutNum) = iVarOut; +} + /* ----------------------------------------------------------------------------- * --- Variable input --- * ----------------------------------------------------------------------------- */ @@ -518,8 +455,11 @@ if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } - getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, NULL); + _pstStrings = (char *)malloc(sizeof(char) * _piLength); + getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, &_pstStrings); $1 = strdup(_pstStrings); + free(_pstStrings); } %typemap(varin,noblock=1) char [ANY] { @@ -531,84 +471,32 @@ if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } - getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); - strcpy($1, _pstStrings); -} - -%typemap(varin,noblock=1) int *{ - int *_piData; - int index; - getVarAddressFromPosition($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); - } - getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); - if($1 != NULL) { - free($1); - } - $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); - for(index = 0; index < iRows * iCols; index++) { - $1[index] = ($*1_ltype)_piData[index]; - } + getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, NULL); + _pstStrings = (char *)malloc(sizeof(char) * _piLength); + getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, &_pstStrings); + strcpy($1, _pstStrings); + free(_pstStrings); } -%typemap(varin,noblock=1) short * { - short *_piData; - int index; - getVarAddressFromPosition($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { - Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); - } - - getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); - if($1 != NULL) { - free($1); - } - $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); - for(index = 0; index < iRows * iCols; index++) { - $1[index] = ($*1_ltype)_piData[index]; - } -} - -%typemap(varin,noblock=1) double *, +%typemap(varin,noblock=1) signed char *, + short *, + unsigned char *, + unsigned short *, + int *, + unsigned int *, + long *, + unsigned long *, + double *, float * { - double *_piData; - int index; + void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); - getVarDimension(piAddrVar, &iRows, &iCols); - if (getVarType(piAddrVar) == sci_matrix ){ - if(!isVarComplex(piAddrVar)) { - isComplex = 0; - getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - if($1 != NULL) { - free($1); - } - $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); - for(index = 0; index < iRows * iCols; index++){ - $1[index] = ($*1_ltype)_piData[index]; - } - } - else { - isComplex = 1; - double *_pdblImg; - getComplexMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData, &_pdblImg); - if($1 != NULL) { - free($1); - } - $1 = ($1_ltype)malloc(2 * iRows * iCols * sizeof($*1_ltype)); - for(index = 0; index < iRows * iCols; index++){ - $1[index] = ($*1_ltype)_piData[index]; - $1[index + iRows * iCols] = (double)_pdblImg[index]; - } - } + if (getVarType(piAddrVar) != sci_lufact_pointer) { + Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum); } - else { - Scierror(999, _("%s: Wrong type for input argument #%d: double matrix expected.\n"), fname, $argnum); - } + getPointer(piAddrVar, &_piData); + $1 = ($1_ltype)_piData; } %typemap(varin,noblock=1) char ** { @@ -634,7 +522,28 @@ $1 = _pstStrings; } +%typemap(varin,noblock=1) SWIGTYPE *(int *piAddrVar) { + void *_piData = NULL; + getVarAddressFromPosition($argnum, &piAddrVar); + + if (getVarType(piAddrVar) != sci_lufact_pointer) { + Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum); + } + getPointer(piAddrVar, &_piData); + $1 = ($1_ltype)_piData; +} +%typemap(varin,nobloack=1) SWIGTYPE { + void *_piData = NULL; + getVarAddressFromPosition($argnum, &piAddrVar); + + if (getVarType(piAddrVar) != sci_lufact_pointer) { + Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum); + } + getPointer(piAddrVar, &_piData); + $1 = *(($&1_ltype)_piData); +} + /* ----------------------------------------------------------------------------- * --- Variable output --- * ----------------------------------------------------------------------------- */ @@ -690,37 +599,25 @@ LhsVar(iOutNum) = iVarOut; } -%typemap(varout,noblock=1) char *{ +%typemap(varout,noblock=1) char * { createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result)); LhsVar(iOutNum) = iVarOut; } -%typemap(varout,noblock=1) int *{ - createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, $result); +%typemap(varout,noblock=1) signed char *, + short *, + unsigned char *, + unsigned short *, + int *, + unsigned int *, + long *, + unsigned long *, + double *, + float * { + createPointer(iVarOut, (void *)$result); LhsVar(iOutNum) = iVarOut; - if($result != NULL) - free($result); } -%typemap(varout,noblock=1) short *{ - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, $result); - LhsVar(iOutNum) = iVarOut; - if($result != NULL) - free($result); -} - -%typemap(varout,noblock=1) double *, - float * { - if(isComplex) { - createComplexMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result, &$result[iRowsOut * iColsOut]); - LhsVar(iOutNum) = iVarOut; - } - else { - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, $result); - LhsVar(iOutNum) = iVarOut; - } -} - %typemap(varout,noblock=1) char [ANY] { char **pstData = NULL; pstData = (char **)malloc(sizeof(char *)); @@ -738,9 +635,17 @@ LhsVar(iOutNum) = iVarOut; } +%typemap(varout,noblock=1) SWIGTYPE * { + createPointer(iVarOut, (void *)$result); + LhsVar(iOutNum) = iVarOut; +} - +%typemap(varout,noblock=1) SWIGTYPE { + createPointer(iVarOut, (void *)&$result); + LhsVar(iOutNum) = iVarOut; +} + /* ------------------------------------------------------------ * Enums mapped as integer values * ------------------------------------------------------------ */ Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-07-30 08:50:56 UTC (rev 11477) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-07-30 09:41:11 UTC (rev 11478) @@ -393,6 +393,7 @@ } } else { + Append(setf->code, "SWIG_Error(999, \"attempt to set immutable member variable\");"); } Append(setf->code, "}\n"); Wrapper_print(setf, f_wrappers); @@ -412,9 +413,14 @@ if ((tm = Swig_typemap_lookup("varout", n, name, 0))) { Replaceall(tm, "$result", name); - Replaceall(tm, "iRowsOut", rowname); - Replaceall(tm, "iColsOut", colname); - Replaceall(tm, "isComplex", iscomplexname); + if (is_assignable(n)) { + Replaceall(tm, "iRowsOut", rowname); + Replaceall(tm, "iColsOut", colname); + } else { + Replaceall(tm, "iRowsOut", "1"); + Replaceall(tm, "iColsOut", "1"); + } + Replaceall(tm, "isComplex", iscomplexname); addfail = emit_action_code(n, getf->code, tm); Delete(tm); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-08-02 01:20:25
|
Revision: 11489 http://swig.svn.sourceforge.net/swig/?rev=11489&view=rev Author: sploving Date: 2009-08-02 01:20:12 +0000 (Sun, 02 Aug 2009) Log Message: ----------- merge from trunk Modified Paths: -------------- branches/gsoc2009-sploving/CHANGES.current branches/gsoc2009-sploving/Doc/Manual/Contents.html branches/gsoc2009-sploving/Doc/Manual/Php.html branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Doc/Manual/Tcl.html branches/gsoc2009-sploving/Doc/Manual/Typemaps.html branches/gsoc2009-sploving/Examples/python/callback/example.h branches/gsoc2009-sploving/Examples/test-suite/common.mk branches/gsoc2009-sploving/Examples/test-suite/csharp_prepost.i branches/gsoc2009-sploving/Examples/test-suite/director_detect.i branches/gsoc2009-sploving/Examples/test-suite/director_protected.i branches/gsoc2009-sploving/Examples/test-suite/director_stl.i branches/gsoc2009-sploving/Examples/test-suite/director_using.i branches/gsoc2009-sploving/Examples/test-suite/li_factory.i branches/gsoc2009-sploving/Examples/test-suite/name_warnings.i branches/gsoc2009-sploving/Examples/test-suite/operator_overload_break.i branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/php/evil_diamond_prop_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/li_carrays_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/tests.php branches/gsoc2009-sploving/Examples/test-suite/template_default.i branches/gsoc2009-sploving/Examples/test-suite/template_default2.i branches/gsoc2009-sploving/Lib/php/php.swg branches/gsoc2009-sploving/Lib/php/phpkw.swg branches/gsoc2009-sploving/Lib/php/phprun.swg branches/gsoc2009-sploving/Lib/php/std_string.i branches/gsoc2009-sploving/Lib/php/utils.i branches/gsoc2009-sploving/Lib/python/std_map.i branches/gsoc2009-sploving/README branches/gsoc2009-sploving/Source/CParse/parser.y branches/gsoc2009-sploving/Source/Include/swigwarn.h branches/gsoc2009-sploving/Source/Makefile.am branches/gsoc2009-sploving/Source/Modules/allegrocl.cxx branches/gsoc2009-sploving/Source/Modules/csharp.cxx branches/gsoc2009-sploving/Source/Modules/emit.cxx branches/gsoc2009-sploving/Source/Modules/java.cxx branches/gsoc2009-sploving/Source/Modules/lang.cxx branches/gsoc2009-sploving/Source/Modules/modula3.cxx branches/gsoc2009-sploving/Source/Modules/overload.cxx branches/gsoc2009-sploving/Source/Modules/php.cxx branches/gsoc2009-sploving/Source/Modules/python.cxx branches/gsoc2009-sploving/Source/Modules/r.cxx branches/gsoc2009-sploving/Source/Modules/swigmod.h branches/gsoc2009-sploving/Source/Swig/naming.c branches/gsoc2009-sploving/Source/Swig/scanner.c branches/gsoc2009-sploving/Source/Swig/swig.h branches/gsoc2009-sploving/Source/Swig/typemap.c Added Paths: ----------- branches/gsoc2009-sploving/Examples/php/callback/ branches/gsoc2009-sploving/Examples/php/callback/Makefile branches/gsoc2009-sploving/Examples/php/callback/example.cxx branches/gsoc2009-sploving/Examples/php/callback/example.h branches/gsoc2009-sploving/Examples/php/callback/example.i branches/gsoc2009-sploving/Examples/php/callback/index.html branches/gsoc2009-sploving/Examples/php/callback/runme.php branches/gsoc2009-sploving/Examples/php/extend/ branches/gsoc2009-sploving/Examples/php/extend/Makefile branches/gsoc2009-sploving/Examples/php/extend/example.cxx branches/gsoc2009-sploving/Examples/php/extend/example.h branches/gsoc2009-sploving/Examples/php/extend/example.i branches/gsoc2009-sploving/Examples/php/extend/index.html branches/gsoc2009-sploving/Examples/php/extend/runme.php branches/gsoc2009-sploving/Examples/test-suite/csharp/special_variable_macros_runme.cs branches/gsoc2009-sploving/Examples/test-suite/java/special_variable_macros_runme.java branches/gsoc2009-sploving/Examples/test-suite/php/director_abstract_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_basic_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_classic_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_default_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_detect_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_enum_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_exception_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_extend_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_finalizer_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_frob_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_nested_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_profile_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_protected_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_stl_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_string_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_thread_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/director_unroll_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/li_factory_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/newobject1_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/prefix_runme.php branches/gsoc2009-sploving/Examples/test-suite/prefix.i branches/gsoc2009-sploving/Examples/test-suite/python/special_variable_macros_runme.py branches/gsoc2009-sploving/Examples/test-suite/special_variable_macros.i branches/gsoc2009-sploving/Lib/php/director.swg branches/gsoc2009-sploving/Lib/php/factory.i Removed Paths: ------------- branches/gsoc2009-sploving/Examples/php/callback/Makefile branches/gsoc2009-sploving/Examples/php/callback/example.cxx branches/gsoc2009-sploving/Examples/php/callback/example.h branches/gsoc2009-sploving/Examples/php/callback/example.i branches/gsoc2009-sploving/Examples/php/callback/index.html branches/gsoc2009-sploving/Examples/php/callback/runme.php branches/gsoc2009-sploving/Examples/php/extend/Makefile branches/gsoc2009-sploving/Examples/php/extend/example.cxx branches/gsoc2009-sploving/Examples/php/extend/example.h branches/gsoc2009-sploving/Examples/php/extend/example.i branches/gsoc2009-sploving/Examples/php/extend/index.html branches/gsoc2009-sploving/Examples/php/extend/runme.php Property Changed: ---------------- branches/gsoc2009-sploving/ Property changes on: branches/gsoc2009-sploving ___________________________________________________________________ Modified: svn:mergeinfo - /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11422 + /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11488 Modified: branches/gsoc2009-sploving/CHANGES.current =================================================================== --- branches/gsoc2009-sploving/CHANGES.current 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/CHANGES.current 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,6 +1,46 @@ Version 1.3.40 (in progress) ============================ +2009-07-31: olly + [Python] Fix indentation so that we give a useful error if the + module can't be loaded. Patch from Gaetan Lehmann in SF#2829853. + +2009-07-29: wsfulton + Add $typemap(method, typelist) special variable macro. This allows + the contents of a typemap to be inserted within another typemap. + Fully documented in Typemaps.html. + +2009-07-29: vmiklos + [PHP] Static member variables are now prefixed with the + class name. This allows static member variables with the + same name in different classes. + +2009-07-29: olly + [Python] Add missing locks to std::map wrappers. Patch from + Paul Hampson in SF#2813836. + +2009-07-29: olly + [PHP] Fix memory leak in PHP OUTPUT typemaps. Reported by Hitoshi + Amano in SF#2826322. + +2009-07-29: olly + [PHP] Fix memory leak in PHP resource destructor for classes + without a destructor and non-class types. Patch from Hitoshi Amano + in SF#2825303. + +2009-07-28: olly + [PHP] Update warnings about clashes between identifiers and PHP + keywords and automatic renaming to work with the PHP5 class + wrappers. Fixes SF#1613679. + +2009-07-28: vmiklos + [PHP] If a member function is not public but it has a base + which is public, then now a warning is issued and the member + function will be public, as PHP requires this. + +2009-07-21: vmiklos + [PHP] Director support added. + 2009-07-15: olly [Perl] Don't specify Perl prototype "()" for a constructor with a different name to the class, as such constructors can still take @@ -17,6 +57,10 @@ of the manual. Based on patch from SF#2810380 by Christian Gollwitzer. +2009-07-02: vmiklos + [PHP] Added factory.i for PHP, see the li_factory testcase + for more info on how to use it. + 2009-07-02: wsfulton Fix -Wallkw option as reported by Solomon Gibbs. @@ -24,6 +68,14 @@ Fix syntax error when a nested struct contains a comment containing a * followed eventually by a /. Regression from 1.3.37, reported by Solomon Gibbs. +2009-07-01: vmiklos + [PHP] Unknown properties are no longer ignored in proxy + classes. + +2009-07-01: vmiklos + [PHP] Fixed %newobject behaviour, previously any method + marked with %newobject was handled as a constructor. + 2009-06-30: olly [Ruby] Undefine close and connect macros defined by Ruby API headers as we don't need them and they can clash with C++ methods @@ -66,6 +118,12 @@ *** POTENTIAL INCOMPATIBILITY *** +2009-05-20: vmiklos + [PHP] Add the 'thisown' member to classes. The usage of it + is the same as the Python thisown one: it's 1 by default and + you can set it to 0 if you want to prevent freeing it. (For + example to prevent a double free.) + 2009-05-14: bhy [Python] Fix the wrong pointer value returned by SwigPyObject_repr(). Modified: branches/gsoc2009-sploving/Doc/Manual/Contents.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Contents.html 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Doc/Manual/Contents.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -337,13 +337,13 @@ </ul> <li><a href="Typemaps.html#Typemaps_nn10">Typemap specifications</a> <ul> -<li><a href="Typemaps.html#Typemaps_nn11">Defining a typemap</a> +<li><a href="Typemaps.html#Typemaps_defining">Defining a typemap</a> <li><a href="Typemaps.html#Typemaps_nn12">Typemap scope</a> <li><a href="Typemaps.html#Typemaps_nn13">Copying a typemap</a> <li><a href="Typemaps.html#Typemaps_nn14">Deleting a typemap</a> <li><a href="Typemaps.html#Typemaps_nn15">Placement of typemaps</a> </ul> -<li><a href="Typemaps.html#Typemaps_nn16">Pattern matching rules</a> +<li><a href="Typemaps.html#Typemaps_pattern_matching">Pattern matching rules</a> <ul> <li><a href="Typemaps.html#Typemaps_nn17">Basic matching rules</a> <li><a href="Typemaps.html#Typemaps_nn18">Typedef reductions</a> @@ -356,7 +356,12 @@ <li><a href="Typemaps.html#Typemaps_nn22">Scope</a> <li><a href="Typemaps.html#Typemaps_nn23">Declaring new local variables</a> <li><a href="Typemaps.html#Typemaps_special_variables">Special variables</a> +<li><a href="Typemaps.html#Typemaps_special_variable_macros">Special variable macros</a> +<ul> +<li><a href="Typemaps.html#Typemaps_special_macro_descriptor">$descriptor(type)</a> +<li><a href="Typemaps.html#Typemaps_special_macro_typemap">$typemap(method, typepattern)</a> </ul> +</ul> <li><a href="Typemaps.html#Typemaps_nn25">Common typemap methods</a> <ul> <li><a href="Typemaps.html#Typemaps_nn26">"in" typemap</a> @@ -384,7 +389,7 @@ <li><a href="Typemaps.html#runtime_type_checker">The run-time type checker</a> <ul> <li><a href="Typemaps.html#Typemaps_nn45">Implementation</a> -<li><a href="Typemaps.html#Typemaps_nn46">Usage</a> +<li><a href="Typemaps.html#Typemaps_runtime_type_checker_usage">Usage</a> </ul> <li><a href="Typemaps.html#Typemaps_overloading">Typemaps and overloading</a> <li><a href="Typemaps.html#Typemaps_nn48">More about <tt>%apply</tt> and <tt>%clear</tt></a> @@ -1115,7 +1120,7 @@ <li><a href="Perl5.html#Perl5_nn24">Modules and packages</a> </ul> <li><a href="Perl5.html#Perl5_nn25">Input and output parameters</a> -<li><a href="Perl5.html#Perl5_nn26">Exception handling </a> +<li><a href="Perl5.html#Perl5_nn26">Exception handling</a> <li><a href="Perl5.html#Perl5_nn27">Remapping datatypes with typemaps</a> <ul> <li><a href="Perl5.html#Perl5_nn28">A simple typemap example</a> @@ -1125,8 +1130,8 @@ </ul> <li><a href="Perl5.html#Perl5_nn32">Typemap Examples</a> <ul> -<li><a href="Perl5.html#Perl5_nn33">Converting a Perl5 array to a char ** </a> -<li><a href="Perl5.html#Perl5_nn34">Return values </a> +<li><a href="Perl5.html#Perl5_nn33">Converting a Perl5 array to a char **</a> +<li><a href="Perl5.html#Perl5_nn34">Return values</a> <li><a href="Perl5.html#Perl5_nn35">Returning values from arguments</a> <li><a href="Perl5.html#Perl5_nn36">Accessing array structure members</a> <li><a href="Perl5.html#Perl5_nn37">Turning Perl references into C pointers</a> @@ -1173,7 +1178,17 @@ </ul> <li><a href="Php.html#Php_nn2_7">PHP Pragmas, Startup and Shutdown code</a> </ul> +<li><a href="Php.html#Php_nn3">Cross language polymorphism</a> +<ul> +<li><a href="Php.html#Php_nn3_1">Enabling directors</a> +<li><a href="Php.html#Php_nn3_2">Director classes</a> +<li><a href="Php.html#Php_nn3_3">Ownership and object destruction</a> +<li><a href="Php.html#Php_nn3_4">Exception unrolling</a> +<li><a href="Php.html#Php_nn3_5">Overhead and code bloat</a> +<li><a href="Php.html#Php_nn3_6">Typemaps</a> +<li><a href="Php.html#Php_nn3_7">Miscellaneous</a> </ul> +</ul> </div> <!-- INDEX --> @@ -1502,6 +1517,7 @@ <ul> <li><a href="Tcl.html#Tcl_nn45">Proxy classes</a> </ul> +<li><a href="Tcl.html#Tcl_nn46">Tcl/Tk Stubs</a> </ul> </div> <!-- INDEX --> Modified: branches/gsoc2009-sploving/Doc/Manual/Php.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Php.html 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Doc/Manual/Php.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -32,7 +32,17 @@ </ul> <li><a href="#Php_nn2_7">PHP Pragmas, Startup and Shutdown code</a> </ul> +<li><a href="#Php_nn3">Cross language polymorphism</a> +<ul> +<li><a href="#Php_nn3_1">Enabling directors</a> +<li><a href="#Php_nn3_2">Director classes</a> +<li><a href="#Php_nn3_3">Ownership and object destruction</a> +<li><a href="#Php_nn3_4">Exception unrolling</a> +<li><a href="#Php_nn3_5">Overhead and code bloat</a> +<li><a href="#Php_nn3_6">Typemaps</a> +<li><a href="#Php_nn3_7">Miscellaneous</a> </ul> +</ul> </div> <!-- INDEX --> @@ -866,5 +876,381 @@ into the request init and shutdown code respectively. </p> +<H2><a name="Php_nn3"></a>29.3 Cross language polymorphism</H2> + + +<p> +Proxy classes provide a more natural, object-oriented way to access +extension classes. As described above, each proxy instance has an +associated C++ instance, and method calls to the proxy are passed to the +C++ instance transparently via C wrapper functions. +</p> + +<p> +This arrangement is asymmetric in the sense that no corresponding +mechanism exists to pass method calls down the inheritance chain from +C++ to PHP. In particular, if a C++ class has been extended in PHP +(by extending the proxy class), these extensions will not be visible +from C++ code. Virtual method calls from C++ are thus not able access +the lowest implementation in the inheritance chain. +</p> + +<p> +Changes have been made to SWIG 1.3.18 to address this problem and make +the relationship between C++ classes and proxy classes more symmetric. +To achieve this goal, new classes called directors are introduced at the +bottom of the C++ inheritance chain. Support for generating PHP classes +has been added in SWIG 1.3.40. The job of the directors is to route +method calls correctly, either to C++ implementations higher in the +inheritance chain or to PHP implementations lower in the inheritance +chain. The upshot is that C++ classes can be extended in PHP and from +C++ these extensions look exactly like native C++ classes. Neither C++ +code nor PHP code needs to know where a particular method is +implemented: the combination of proxy classes, director classes, and C +wrapper functions takes care of all the cross-language method routing +transparently. +</p> + +<H3><a name="Php_nn3_1"></a>29.3.1 Enabling directors</H3> + + +<p> +The director feature is disabled by default. To use directors you +must make two changes to the interface file. First, add the "directors" +option to the %module directive, like this: +</p> + +<div class="code"> +<pre> +%module(directors="1") modulename +</pre> +</div> + +<p> +Without this option no director code will be generated. Second, you +must use the %feature("director") directive to tell SWIG which classes +and methods should get directors. The %feature directive can be applied +globally, to specific classes, and to specific methods, like this: +</p> + +<div class="code"> +<pre> +// generate directors for all classes that have virtual methods +%feature("director"); + +// generate directors for all virtual methods in class Foo +%feature("director") Foo; + +// generate a director for just Foo::bar() +%feature("director") Foo::bar; +</pre> +</div> + +<p> +You can use the %feature("nodirector") directive to turn off +directors for specific classes or methods. So for example, +</p> + +<div class="code"> +<pre> +%feature("director") Foo; +%feature("nodirector") Foo::bar; +</pre> +</div> + +<p> +will generate directors for all virtual methods of class Foo except +bar(). +</p> + +<p> +Directors can also be generated implicitly through inheritance. +In the following, class Bar will get a director class that handles +the methods one() and two() (but not three()): +</p> + +<div class="code"> +<pre> +%feature("director") Foo; +class Foo { +public: + Foo(int foo); + virtual void one(); + virtual void two(); +}; + +class Bar: public Foo { +public: + virtual void three(); +}; +</pre> +</div> + +<p> +then at the PHP side you can define +</p> + +<div class="targetlang"> +<pre> +require("mymodule.php"); + +class MyFoo extends Foo { + function one() { + print "one from php\n"; + } +} +</pre> +</div> + + +<H3><a name="Php_nn3_2"></a>29.3.2 Director classes</H3> + + + + + +<p> +For each class that has directors enabled, SWIG generates a new class +that derives from both the class in question and a special +<tt>Swig::Director</tt> class. These new classes, referred to as director +classes, can be loosely thought of as the C++ equivalent of the PHP +proxy classes. The director classes store a pointer to their underlying +PHP object. Indeed, this is quite similar to the "_cPtr" and "thisown" +members of the PHP proxy classes. +</p> + +<p> +For simplicity let's ignore the <tt>Swig::Director</tt> class and refer to the +original C++ class as the director's base class. By default, a director +class extends all virtual methods in the inheritance chain of its base +class (see the preceding section for how to modify this behavior). +Thus all virtual method calls, whether they originate in C++ or in +PHP via proxy classes, eventually end up in at the implementation in the +director class. The job of the director methods is to route these method +calls to the appropriate place in the inheritance chain. By "appropriate +place" we mean the method that would have been called if the C++ base +class and its extensions in PHP were seamlessly integrated. That +seamless integration is exactly what the director classes provide, +transparently skipping over all the messy extension API glue that binds +the two languages together. +</p> + +<p> +In reality, the "appropriate place" is one of only two possibilities: +C++ or PHP. Once this decision is made, the rest is fairly easy. If the +correct implementation is in C++, then the lowest implementation of the +method in the C++ inheritance chain is called explicitly. If the correct +implementation is in PHP, the Zend API is used to call the method of the +underlying PHP object (after which the usual virtual method resolution +in PHP automatically finds the right implementation). +</p> + +<p> +Now how does the director decide which language should handle the method call? +The basic rule is to handle the method in PHP, unless there's a good +reason not to. The reason for this is simple: PHP has the most +"extended" implementation of the method. This assertion is guaranteed, +since at a minimum the PHP proxy class implements the method. If the +method in question has been extended by a class derived from the proxy +class, that extended implementation will execute exactly as it should. +If not, the proxy class will route the method call into a C wrapper +function, expecting that the method will be resolved in C++. The wrapper +will call the virtual method of the C++ instance, and since the director +extends this the call will end up right back in the director method. Now +comes the "good reason not to" part. If the director method were to blindly +call the PHP method again, it would get stuck in an infinite loop. We avoid this +situation by adding special code to the C wrapper function that tells +the director method to not do this. The C wrapper function compares the +called and the declaring class name of the given method. If these are +not the same, then the C wrapper function tells the director to resolve +the method by calling up the C++ inheritance chain, preventing an +infinite loop. +</p> + +<p> +One more point needs to be made about the relationship between director +classes and proxy classes. When a proxy class instance is created in +PHP, SWIG creates an instance of the original C++ class and assigns it +to <tt>->_cPtr</tt>. This is exactly what happens without directors +and is true even if directors are enabled for the particular class in +question. When a class <i>derived</i> from a proxy class is created, +however, SWIG then creates an instance of the corresponding C++ director +class. The reason for this difference is that user-defined subclasses +may override or extend methods of the original class, so the director +class is needed to route calls to these methods correctly. For +unmodified proxy classes, all methods are ultimately implemented in C++ +so there is no need for the extra overhead involved with routing the +calls through PHP. +</p> + +<H3><a name="Php_nn3_3"></a>29.3.3 Ownership and object destruction</H3> + + +<p> +Memory management issues are slightly more complicated with directors +than for proxy classes alone. PHP instances hold a pointer to the +associated C++ director object, and the director in turn holds a pointer +back to the PHP object. By default, proxy classes own their C++ director +object and take care of deleting it when they are garbage collected. +</p> + +<p> +This relationship can be reversed by calling the special +<tt>->thisown</tt> property of the proxy class. After setting this +property to <tt>0</tt>, the director class no longer destroys the PHP +object. Assuming no outstanding references to the PHP object remain, +the PHP object will be destroyed at the same time. This is a good thing, +since directors and proxies refer to each other and so must be created +and destroyed together. Destroying one without destroying the other will +likely cause your program to segfault. +</p> + +<p> +Here is an example: +</p> + +<div class="code"> +<pre> +class Foo { +public: + ... +}; +class FooContainer { +public: + void addFoo(Foo *); + ... +}; +</pre> +</div> + +<br> + +<div class="targetlang"> +<pre> +$c = new FooContainer(); +$a = new Foo(); +$a->thisown = 0; +$c->addFoo($a); +</pre> +</div> + +<p> +In this example, we are assuming that FooContainer will take care of +deleting all the Foo pointers it contains at some point. +</p> + +<H3><a name="Php_nn3_4"></a>29.3.4 Exception unrolling</H3> + + +<p> +With directors routing method calls to PHP, and proxies routing them +to C++, the handling of exceptions is an important concern. By default, the +directors ignore exceptions that occur during method calls that are +resolved in PHP. To handle such exceptions correctly, it is necessary +to temporarily translate them into C++ exceptions. This can be done with +the %feature("director:except") directive. The following code should +suffice in most cases: +</p> + +<div class="code"> +<pre> +%feature("director:except") { + if ($error == FAILURE) { + throw Swig::DirectorMethodException(); + } +} +</pre> +</div> + +<p> +This code will check the PHP error state after each method call from a +director into PHP, and throw a C++ exception if an error occurred. This +exception can be caught in C++ to implement an error handler. +Currently no information about the PHP error is stored in the +Swig::DirectorMethodException object, but this will likely change in the +future. +</p> + +<p> +It may be the case that a method call originates in PHP, travels up to +C++ through a proxy class, and then back into PHP via a director method. +If an exception occurs in PHP at this point, it would be nice for that +exception to find its way back to the original caller. This can be done +by combining a normal %exception directive with the +<tt>director:except</tt> handler shown above. Here is an example of a +suitable exception handler: +</p> + +<div class="code"> +<pre> +%exception { + try { $action } + catch (Swig::DirectorException &e) { SWIG_fail; } +} +</pre> +</div> + +<p> +The class Swig::DirectorException used in this example is actually a +base class of Swig::DirectorMethodException, so it will trap this +exception. Because the PHP error state is still set when +Swig::DirectorMethodException is thrown, PHP will register the exception +as soon as the C wrapper function returns. +</p> + +<H3><a name="Php_nn3_5"></a>29.3.5 Overhead and code bloat</H3> + + +<p> +Enabling directors for a class will generate a new director method for +every virtual method in the class' inheritance chain. This alone can +generate a lot of code bloat for large hierarchies. Method arguments +that require complex conversions to and from target language types can +result in large director methods. For this reason it is recommended that +you selectively enable directors only for specific classes that are +likely to be extended in PHP and used in C++. +</p> + +<p> +Compared to classes that do not use directors, the call routing in the +director methods does add some overhead. In particular, at least one +dynamic cast and one extra function call occurs per method call from +PHP. Relative to the speed of PHP execution this is probably completely +negligible. For worst case routing, a method call that ultimately +resolves in C++ may take one extra detour through PHP in order to ensure +that the method does not have an extended PHP implementation. This could +result in a noticeable overhead in some cases. +</p> + +<p> +Although directors make it natural to mix native C++ objects with PHP +objects (as director objects) via a common base class pointer, one +should be aware of the obvious fact that method calls to PHP objects +will be much slower than calls to C++ objects. This situation can be +optimized by selectively enabling director methods (using the %feature +directive) for only those methods that are likely to be extended in PHP. +</p> + +<H3><a name="Php_nn3_6"></a>29.3.6 Typemaps</H3> + + +<p> +Typemaps for input and output of most of the basic types from director +classes have been written. These are roughly the reverse of the usual +input and output typemaps used by the wrapper code. The typemap +operation names are 'directorin', 'directorout', and 'directorargout'. +The director code does not currently use any of the other kinds of +typemaps. It is not clear at this point which kinds are appropriate and +need to be supported. +</p> + + +<H3><a name="Php_nn3_7"></a>29.3.7 Miscellaneous</H3> + + +<p> Director typemaps for STL classes are mostly in place, and hence you +should be able to use std::string, etc., as you would any other type. +</p> + </body> </html> Modified: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -25,8 +25,8 @@ <li><a href="#scilab_nn10">Global variables</a> <li><a href="#Scilab_nn11">Constants</a> <li><a href="#Scilab_nn12">Enums</a> -<li><a href="#Octave_nn13">Pointers</a> -<li><a href="#Octave_nn14">Structs</a> +<li><a href="#Scilab_nn13">Pointers</a> +<li><a href="#Scilab_nn14">Structs</a> </ul> </ul> </div> @@ -315,7 +315,7 @@ </pre></div> -<H3><a name="Octave_nn13"></a>27.3.5 Pointers</H3> +<H3><a name="Scilab_nn13"></a>27.3.5 Pointers</H3> <p> Pointers are fully supported by SWIG. One way to deal with the pointers is using the INPUT and OUTPUT typemaps. For example, in order to call C functions as the following: </p> @@ -356,7 +356,7 @@ we only need a real value instead. </p> -<H3><a name="Octave_nn14"></a>27.3.6 Structs</H3> +<H3><a name="Scilab_nn14"></a>27.3.6 Structs</H3> <p> SWIG creates a set of accessor functions when encountering a structure or union. For example: </p> Modified: branches/gsoc2009-sploving/Doc/Manual/Tcl.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Tcl.html 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Doc/Manual/Tcl.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -3412,6 +3412,7 @@ <H2><a name="Tcl_nn46"></a>33.10 Tcl/Tk Stubs</H2> + <p> For background information about the Tcl Stubs feature, see <a href="http://www.tcl.tk/doc/howto/stubs.html">http://www.tcl.tk/doc/howto/stubs.html</a>. Modified: branches/gsoc2009-sploving/Doc/Manual/Typemaps.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Typemaps.html 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Doc/Manual/Typemaps.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -22,13 +22,13 @@ </ul> <li><a href="#Typemaps_nn10">Typemap specifications</a> <ul> -<li><a href="#Typemaps_nn11">Defining a typemap</a> +<li><a href="#Typemaps_defining">Defining a typemap</a> <li><a href="#Typemaps_nn12">Typemap scope</a> <li><a href="#Typemaps_nn13">Copying a typemap</a> <li><a href="#Typemaps_nn14">Deleting a typemap</a> <li><a href="#Typemaps_nn15">Placement of typemaps</a> </ul> -<li><a href="#Typemaps_nn16">Pattern matching rules</a> +<li><a href="#Typemaps_pattern_matching">Pattern matching rules</a> <ul> <li><a href="#Typemaps_nn17">Basic matching rules</a> <li><a href="#Typemaps_nn18">Typedef reductions</a> @@ -41,7 +41,12 @@ <li><a href="#Typemaps_nn22">Scope</a> <li><a href="#Typemaps_nn23">Declaring new local variables</a> <li><a href="#Typemaps_special_variables">Special variables</a> +<li><a href="#Typemaps_special_variable_macros">Special variable macros</a> +<ul> +<li><a href="#Typemaps_special_macro_descriptor">$descriptor(type)</a> +<li><a href="#Typemaps_special_macro_typemap">$typemap(method, typepattern)</a> </ul> +</ul> <li><a href="#Typemaps_nn25">Common typemap methods</a> <ul> <li><a href="#Typemaps_nn26">"in" typemap</a> @@ -69,7 +74,7 @@ <li><a href="#runtime_type_checker">The run-time type checker</a> <ul> <li><a href="#Typemaps_nn45">Implementation</a> -<li><a href="#Typemaps_nn46">Usage</a> +<li><a href="#Typemaps_runtime_type_checker_usage">Usage</a> </ul> <li><a href="#Typemaps_overloading">Typemaps and overloading</a> <li><a href="#Typemaps_nn48">More about <tt>%apply</tt> and <tt>%clear</tt></a> @@ -655,7 +660,7 @@ This section describes the behavior of the <tt>%typemap</tt> directive itself. </p> -<H3><a name="Typemaps_nn11"></a>10.2.1 Defining a typemap</H3> +<H3><a name="Typemaps_defining"></a>10.2.1 Defining a typemap</H3> <p> @@ -988,7 +993,7 @@ within a particular namespace. In this example, this is done using the class declaration <tt>class string</tt>. </p> -<H2><a name="Typemaps_nn16"></a>10.3 Pattern matching rules</H2> +<H2><a name="Typemaps_pattern_matching"></a>10.3 Pattern matching rules</H2> <p> @@ -1646,6 +1651,7 @@ <p> Within all typemaps, the following special variables are expanded. +This is by no means a complete list as some target languages have additional special variables which are documented in the language specific chapters. </p> <center> @@ -1892,6 +1898,86 @@ </pre> </div> +<H3><a name="Typemaps_special_variable_macros"></a>10.4.4 Special variable macros</H3> + + +<p> +Special variable macros are like macro functions in that they take one or more input arguments +which are used for the macro expansion. +They look like macro/function calls but use the special variable <tt>$</tt> prefix to the macro name. +Note that unlike normal macros, the expansion is not done by the preprocessor, +it is done during the SWIG parsing/compilation stages. +The following special variable macros are available across all language modules. +</p> + +<H4><a name="Typemaps_special_macro_descriptor"></a>10.4.4.1 $descriptor(type)</H4> + + +<p> +This macro expands into the type descriptor structure for any C/C++ type specified in <tt>type</tt>. +It behaves like the <tt>$1_descriptor</tt> special variable described above except that the type to expand is +taken from the macro argument rather than inferred from the typemap type. +For example, <tt>$descriptor(std::vector<int> *)</tt> will expand into <tt>SWIGTYPE_p_std__vectorT_int_t</tt>. +This macro is mostly used in the scripting target languages and is demonstrated later in the <a href="#Typemaps_runtime_type_checker_usage">Run-time type checker usage</a> section. +</p> + +<H4><a name="Typemaps_special_macro_typemap"></a>10.4.4.2 $typemap(method, typepattern)</H4> + + +<p> +This macro uses the <a href="#Typemaps_pattern_matching">pattern matching rules</a> described earlier to lookup and +then substitute the special variable macro with the code in the matched typemap. +The typemap to search for is specified by the arguments, where <tt>method</tt> is the typemap method name and +<tt>typepattern</tt> is a type pattern as per the <tt>%typemap</tt> specification in the <a href="#Typemaps_defining">Defining a typemap</a> section. +</p> + +<p> +The special variables within the matched typemap are expanded into those for the matched typemap type, +not the typemap within which the macro is called. +In practice, there is little use for this macro in the scripting target languages. +It is mostly used in the target languages that are statically typed as a way to obtain the target language type given the C/C++ type and more commonly only when the C++ type is a template parameter. +</p> + +<p> +The example below is for C# only and uses some typemap method names documented in the C# chapter, but it shows some of the possible syntax variations. +</p> + +<div class="code"> +<pre> +%typemap(cstype) unsigned long "uint" +%typemap(cstype) unsigned long bb "bool" +%typemap(cscode) BarClass %{ + void foo($typemap(cstype, unsigned long aa) var1, + $typemap(cstype, unsigned long bb) var2, + $typemap(cstype, (unsigned long bb)) var3, + $typemap(cstype, unsigned long) var4) + { + // do something + } +%} +</pre> +</div> + +<p> +The result is the following expansion +</p> + +<div class="code"> +<pre> +%typemap(cstype) unsigned long "uint" +%typemap(cstype) unsigned long bb "bool" +%typemap(cscode) BarClass %{ + void foo(uint var1, + bool var2, + bool var3, + uint var4) + { + // do something + } +%} +</pre> +</div> + <H2><a name="Typemaps_nn25"></a>10.5 Common typemap methods</H2> @@ -3295,7 +3381,7 @@ structures are chained together in a circularly linked list. </p> -<H3><a name="Typemaps_nn46"></a>10.10.2 Usage</H3> +<H3><a name="Typemaps_runtime_type_checker_usage"></a>10.10.2 Usage</H3> <p>This section covers how to use these functions from typemaps. To learn how to @@ -3335,8 +3421,8 @@ <p> Occasionally, you might need to write a typemap that needs to convert -pointers of other types. To handle this, a special macro substitution -<tt>$descriptor(type)</tt> can be used to generate the SWIG type +pointers of other types. To handle this, the special variable macro +<tt>$descriptor(type)</tt> covered earlier can be used to generate the SWIG type descriptor name for any C datatype. For example: </p> Deleted: branches/gsoc2009-sploving/Examples/php/callback/Makefile =================================================================== --- trunk/Examples/php/callback/Makefile 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/callback/Makefile 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,22 +0,0 @@ -TOP = ../.. -SWIG = $(TOP)/../preinst-swig -CXXSRCS = example.cxx -TARGET = example -INTERFACE = example.i -LIBS = -lm -SWIGOPT = - -all:: - $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ - SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' php_cpp - -static:: - $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ - SWIGOPT='$(SWIGOPT)' TARGET='myphp' INTERFACE='$(INTERFACE)' php_cpp_static - -clean:: - $(MAKE) -f $(TOP)/Makefile php_clean - rm -f $(TARGET).php - -check: all - $(MAKE) -f $(TOP)/Makefile php_run Copied: branches/gsoc2009-sploving/Examples/php/callback/Makefile (from rev 11488, trunk/Examples/php/callback/Makefile) =================================================================== --- branches/gsoc2009-sploving/Examples/php/callback/Makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/php/callback/Makefile 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,22 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +CXXSRCS = example.cxx +TARGET = example +INTERFACE = example.i +LIBS = -lm +SWIGOPT = + +all:: + $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' php_cpp + +static:: + $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='myphp' INTERFACE='$(INTERFACE)' php_cpp_static + +clean:: + $(MAKE) -f $(TOP)/Makefile php_clean + rm -f $(TARGET).php + +check: all + $(MAKE) -f $(TOP)/Makefile php_run Deleted: branches/gsoc2009-sploving/Examples/php/callback/example.cxx =================================================================== --- trunk/Examples/php/callback/example.cxx 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/callback/example.cxx 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,4 +0,0 @@ -/* File : example.cxx */ - -#include "example.h" - Copied: branches/gsoc2009-sploving/Examples/php/callback/example.cxx (from rev 11488, trunk/Examples/php/callback/example.cxx) =================================================================== --- branches/gsoc2009-sploving/Examples/php/callback/example.cxx (rev 0) +++ branches/gsoc2009-sploving/Examples/php/callback/example.cxx 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,4 @@ +/* File : example.cxx */ + +#include "example.h" + Deleted: branches/gsoc2009-sploving/Examples/php/callback/example.h =================================================================== --- trunk/Examples/php/callback/example.h 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/callback/example.h 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,22 +0,0 @@ -/* File : example.h */ - -#include <iostream> - -class Callback { -public: - virtual ~Callback() { std::cout << "Callback::~Callback()" << std:: endl; } - virtual void run() { std::cout << "Callback::run()" << std::endl; } -}; - - -class Caller { -private: - Callback *_callback; -public: - Caller(): _callback(0) {} - ~Caller() { delCallback(); } - void delCallback() { delete _callback; _callback = 0; } - void setCallback(Callback *cb) { delCallback(); _callback = cb; } - void call() { if (_callback) _callback->run(); } -}; - Copied: branches/gsoc2009-sploving/Examples/php/callback/example.h (from rev 11488, trunk/Examples/php/callback/example.h) =================================================================== --- branches/gsoc2009-sploving/Examples/php/callback/example.h (rev 0) +++ branches/gsoc2009-sploving/Examples/php/callback/example.h 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,22 @@ +/* File : example.h */ + +#include <iostream> + +class Callback { +public: + virtual ~Callback() { std::cout << "Callback::~Callback()" << std:: endl; } + virtual void run() { std::cout << "Callback::run()" << std::endl; } +}; + + +class Caller { +private: + Callback *_callback; +public: + Caller(): _callback(0) {} + ~Caller() { delCallback(); } + void delCallback() { delete _callback; _callback = 0; } + void setCallback(Callback *cb) { delCallback(); _callback = cb; } + void call() { if (_callback) _callback->run(); } +}; + Deleted: branches/gsoc2009-sploving/Examples/php/callback/example.i =================================================================== --- trunk/Examples/php/callback/example.i 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/callback/example.i 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,13 +0,0 @@ -/* File : example.i */ -%module(directors="1") example -%{ -#include "example.h" -%} - -%include "std_string.i" - -/* turn on director wrapping Callback */ -%feature("director") Callback; - -%include "example.h" - Copied: branches/gsoc2009-sploving/Examples/php/callback/example.i (from rev 11488, trunk/Examples/php/callback/example.i) =================================================================== --- branches/gsoc2009-sploving/Examples/php/callback/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/php/callback/example.i 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,13 @@ +/* File : example.i */ +%module(directors="1") example +%{ +#include "example.h" +%} + +%include "std_string.i" + +/* turn on director wrapping Callback */ +%feature("director") Callback; + +%include "example.h" + Deleted: branches/gsoc2009-sploving/Examples/php/callback/index.html =================================================================== --- trunk/Examples/php/callback/index.html 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/callback/index.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,19 +0,0 @@ -<html> -<head> -<title>SWIG:Examples:php:callback</title> -</head> - -<body bgcolor="#ffffff"> - - -<tt>SWIG/Examples/php/callback/</tt> -<hr> - -<H2>Implementing C++ callbacks in PHP</H2> - -<p> -This example illustrates how to use directors to implement C++ callbacks in PHP. - -<hr> -</body> -</html> Copied: branches/gsoc2009-sploving/Examples/php/callback/index.html (from rev 11488, trunk/Examples/php/callback/index.html) =================================================================== --- branches/gsoc2009-sploving/Examples/php/callback/index.html (rev 0) +++ branches/gsoc2009-sploving/Examples/php/callback/index.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,19 @@ +<html> +<head> +<title>SWIG:Examples:php:callback</title> +</head> + +<body bgcolor="#ffffff"> + + +<tt>SWIG/Examples/php/callback/</tt> +<hr> + +<H2>Implementing C++ callbacks in PHP</H2> + +<p> +This example illustrates how to use directors to implement C++ callbacks in PHP. + +<hr> +</body> +</html> Deleted: branches/gsoc2009-sploving/Examples/php/callback/runme.php =================================================================== --- trunk/Examples/php/callback/runme.php 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/callback/runme.php 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,47 +0,0 @@ -<?php - -# This file illustrates the cross language polymorphism using directors. - -require("example.php"); - -# Class, which overwrites Callback::run(). - -class PhpCallback extends Callback { - function run() { - print "PhpCallback.run()\n"; - } -}; - -# Create an Caller instance - -$caller = new Caller(); - -# Add a simple C++ callback (caller owns the callback, so -# we disown it first by clearing the .thisown flag). - -print "Adding and calling a normal C++ callback\n"; -print "----------------------------------------\n"; - -$callback = new Callback(); -$callback->thisown = 0; -$caller->setCallback($callback); -$caller->call(); -$caller->delCallback(); - -print "\n"; -print "Adding and calling a PHP callback\n"; -print "------------------------------------\n"; - -# Add a PHP callback. - -$callback = new PhpCallback(); -$callback->thisown = 0; -$caller->setCallback($callback); -$caller->call(); -$caller->delCallback(); - -# All done. - -print "php exit\n"; - -?> Copied: branches/gsoc2009-sploving/Examples/php/callback/runme.php (from rev 11488, trunk/Examples/php/callback/runme.php) =================================================================== --- branches/gsoc2009-sploving/Examples/php/callback/runme.php (rev 0) +++ branches/gsoc2009-sploving/Examples/php/callback/runme.php 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,47 @@ +<?php + +# This file illustrates the cross language polymorphism using directors. + +require("example.php"); + +# Class, which overwrites Callback::run(). + +class PhpCallback extends Callback { + function run() { + print "PhpCallback.run()\n"; + } +}; + +# Create an Caller instance + +$caller = new Caller(); + +# Add a simple C++ callback (caller owns the callback, so +# we disown it first by clearing the .thisown flag). + +print "Adding and calling a normal C++ callback\n"; +print "----------------------------------------\n"; + +$callback = new Callback(); +$callback->thisown = 0; +$caller->setCallback($callback); +$caller->call(); +$caller->delCallback(); + +print "\n"; +print "Adding and calling a PHP callback\n"; +print "------------------------------------\n"; + +# Add a PHP callback. + +$callback = new PhpCallback(); +$callback->thisown = 0; +$caller->setCallback($callback); +$caller->call(); +$caller->delCallback(); + +# All done. + +print "php exit\n"; + +?> Deleted: branches/gsoc2009-sploving/Examples/php/extend/Makefile =================================================================== --- trunk/Examples/php/extend/Makefile 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/extend/Makefile 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,22 +0,0 @@ -TOP = ../.. -SWIG = $(TOP)/../preinst-swig -CXXSRCS = example.cxx -TARGET = example -INTERFACE = example.i -LIBS = -lm -SWIGOPT = - -all:: - $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ - SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' php_cpp - -static:: - $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ - SWIGOPT='$(SWIGOPT)' TARGET='myphp' INTERFACE='$(INTERFACE)' php_cpp_static - -clean:: - $(MAKE) -f $(TOP)/Makefile php_clean - rm -f $(TARGET).php - -check: all - $(MAKE) -f $(TOP)/Makefile php_run Copied: branches/gsoc2009-sploving/Examples/php/extend/Makefile (from rev 11488, trunk/Examples/php/extend/Makefile) =================================================================== --- branches/gsoc2009-sploving/Examples/php/extend/Makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/php/extend/Makefile 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,22 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +CXXSRCS = example.cxx +TARGET = example +INTERFACE = example.i +LIBS = -lm +SWIGOPT = + +all:: + $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' php_cpp + +static:: + $(MAKE) -f $(TOP)/Makefile $(SWIGLIB) CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='myphp' INTERFACE='$(INTERFACE)' php_cpp_static + +clean:: + $(MAKE) -f $(TOP)/Makefile php_clean + rm -f $(TARGET).php + +check: all + $(MAKE) -f $(TOP)/Makefile php_run Deleted: branches/gsoc2009-sploving/Examples/php/extend/example.cxx =================================================================== --- trunk/Examples/php/extend/example.cxx 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/extend/example.cxx 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,4 +0,0 @@ -/* File : example.cxx */ - -#include "example.h" - Copied: branches/gsoc2009-sploving/Examples/php/extend/example.cxx (from rev 11488, trunk/Examples/php/extend/example.cxx) =================================================================== --- branches/gsoc2009-sploving/Examples/php/extend/example.cxx (rev 0) +++ branches/gsoc2009-sploving/Examples/php/extend/example.cxx 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,4 @@ +/* File : example.cxx */ + +#include "example.h" + Deleted: branches/gsoc2009-sploving/Examples/php/extend/example.h =================================================================== --- trunk/Examples/php/extend/example.h 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/extend/example.h 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,56 +0,0 @@ -/* File : example.h */ - -#include <cstdio> -#include <iostream> -#include <vector> -#include <string> -#include <cmath> - -class Employee { -private: - std::string name; -public: - Employee(const char* n): name(n) {} - virtual std::string getTitle() { return getPosition() + " " + getName(); } - virtual std::string getName() { return name; } - virtual std::string getPosition() const { return "Employee"; } - virtual ~Employee() { printf("~Employee() @ %p\n", this); } -}; - - -class Manager: public Employee { -public: - Manager(const char* n): Employee(n) {} - virtual std::string getPosition() const { return "Manager"; } -}; - - -class EmployeeList { - std::vector<Employee*> list; -public: - EmployeeList() { - list.push_back(new Employee("Bob")); - list.push_back(new Employee("Jane")); - list.push_back(new Manager("Ted")); - } - void addEmployee(Employee *p) { - list.push_back(p); - std::cout << "New employee added. Current employees are:" << std::endl; - std::vector<Employee*>::iterator i; - for (i=list.begin(); i!=list.end(); i++) { - std::cout << " " << (*i)->getTitle() << std::endl; - } - } - const Employee *get_item(int i) { - return list[i]; - } - ~EmployeeList() { - std::vector<Employee*>::iterator i; - std::cout << "~EmployeeList, deleting " << list.size() << " employees." << std::endl; - for (i=list.begin(); i!=list.end(); i++) { - delete *i; - } - std::cout << "~EmployeeList empty." << std::endl; - } -}; - Copied: branches/gsoc2009-sploving/Examples/php/extend/example.h (from rev 11488, trunk/Examples/php/extend/example.h) =================================================================== --- branches/gsoc2009-sploving/Examples/php/extend/example.h (rev 0) +++ branches/gsoc2009-sploving/Examples/php/extend/example.h 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,56 @@ +/* File : example.h */ + +#include <cstdio> +#include <iostream> +#include <vector> +#include <string> +#include <cmath> + +class Employee { +private: + std::string name; +public: + Employee(const char* n): name(n) {} + virtual std::string getTitle() { return getPosition() + " " + getName(); } + virtual std::string getName() { return name; } + virtual std::string getPosition() const { return "Employee"; } + virtual ~Employee() { printf("~Employee() @ %p\n", this); } +}; + + +class Manager: public Employee { +public: + Manager(const char* n): Employee(n) {} + virtual std::string getPosition() const { return "Manager"; } +}; + + +class EmployeeList { + std::vector<Employee*> list; +public: + EmployeeList() { + list.push_back(new Employee("Bob")); + list.push_back(new Employee("Jane")); + list.push_back(new Manager("Ted")); + } + void addEmployee(Employee *p) { + list.push_back(p); + std::cout << "New employee added. Current employees are:" << std::endl; + std::vector<Employee*>::iterator i; + for (i=list.begin(); i!=list.end(); i++) { + std::cout << " " << (*i)->getTitle() << std::endl; + } + } + const Employee *get_item(int i) { + return list[i]; + } + ~EmployeeList() { + std::vector<Employee*>::iterator i; + std::cout << "~EmployeeList, deleting " << list.size() << " employees." << std::endl; + for (i=list.begin(); i!=list.end(); i++) { + delete *i; + } + std::cout << "~EmployeeList empty." << std::endl; + } +}; + Deleted: branches/gsoc2009-sploving/Examples/php/extend/example.i =================================================================== --- trunk/Examples/php/extend/example.i 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/extend/example.i 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,15 +0,0 @@ -/* File : example.i */ -%module(directors="1") example -%{ -#include "example.h" -%} - -%include "std_vector.i" -%include "std_string.i" - -/* turn on director wrapping for Manager */ -%feature("director") Employee; -%feature("director") Manager; - -%include "example.h" - Copied: branches/gsoc2009-sploving/Examples/php/extend/example.i (from rev 11488, trunk/Examples/php/extend/example.i) =================================================================== --- branches/gsoc2009-sploving/Examples/php/extend/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/php/extend/example.i 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,15 @@ +/* File : example.i */ +%module(directors="1") example +%{ +#include "example.h" +%} + +%include "std_vector.i" +%include "std_string.i" + +/* turn on director wrapping for Manager */ +%feature("director") Employee; +%feature("director") Manager; + +%include "example.h" + Deleted: branches/gsoc2009-sploving/Examples/php/extend/index.html =================================================================== --- trunk/Examples/php/extend/index.html 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/extend/index.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,19 +0,0 @@ -<html> -<head> -<title>SWIG:Examples:php:extend</title> -</head> - -<body bgcolor="#ffffff"> - - -<tt>SWIG/Examples/php/extend/</tt> -<hr> - -<H2>Extending a simple C++ class in PHP</H2> - -<p> -This example illustrates the extending of a C++ class with cross language polymorphism. - -<hr> -</body> -</html> Copied: branches/gsoc2009-sploving/Examples/php/extend/index.html (from rev 11488, trunk/Examples/php/extend/index.html) =================================================================== --- branches/gsoc2009-sploving/Examples/php/extend/index.html (rev 0) +++ branches/gsoc2009-sploving/Examples/php/extend/index.html 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,19 @@ +<html> +<head> +<title>SWIG:Examples:php:extend</title> +</head> + +<body bgcolor="#ffffff"> + + +<tt>SWIG/Examples/php/extend/</tt> +<hr> + +<H2>Extending a simple C++ class in PHP</H2> + +<p> +This example illustrates the extending of a C++ class with cross language polymorphism. + +<hr> +</body> +</html> Deleted: branches/gsoc2009-sploving/Examples/php/extend/runme.php =================================================================== --- trunk/Examples/php/extend/runme.php 2009-08-01 22:31:38 UTC (rev 11488) +++ branches/gsoc2009-sploving/Examples/php/extend/runme.php 2009-08-02 01:20:12 UTC (rev 11489) @@ -1,76 +0,0 @@ -<?php - -# This file illustrates the cross language polymorphism using directors. - -require("example.php"); - -# CEO class, which overrides Employee::getPosition(). - -class CEO extends Manager { - function getPosition() { - return "CEO"; - } -} - -# Create an instance of our employee extension class, CEO. The calls to -# getName() and getPosition() are standard, the call to getTitle() uses -# the director wrappers to call CEO.getPosition. - -$e = new CEO("Alice"); -print $e->getName() . " is a " . $e->getPosition() . "\n"; -printf("Just call her \"%s\"\n", $e->getTitle()); -print "----------------------\n"; - -# Create a new EmployeeList instance. This class does not have a C++ -# director wrapper, but can be used freely with other classes that do. - -$list = new EmployeeList(); - -# EmployeeList owns its items, so we must surrender ownership of objects -# we add. This involves first clearing the ->disown member to tell the -# C++ director to start reference counting. - -$e->thisown = 0; -$list->addEmployee($e); -print "----------------------\n"; - -# Now we access the first four items in list (three are C++ objects that -# EmployeeList's constructor adds, the last is our CEO). The virtual -# methods of all these instances are treated the same. For items 0, 1, and -# 2, both all methods resolve in C++. For item 3, our CEO, getTitle calls -# getPosition which resolves in PHP. The call to getPosition is -# slightly different, however, from the e.getPosition() call above, since -# now the object reference has been "laundered" by passing through -# EmployeeList as an Employee*. Previously, PHP resolved the call -# immediately in CEO, but now PHP thinks the object is an instance of -# class Employee (actually EmployeePtr). So the call passes through the -# Employee proxy class and on to the C wrappers and C++ director, -# eventually ending up back at the CEO implementation of getPosition(). -# The call to getTitle() for item 3 runs the C++ Employee::getTitle() -# method, which in turn calls getPosition(). This virtual method call -# passes down through the C++ director class to the PHP implementation -# in CEO. All this routing takes place transparently. - -print "(position, title) for items 0-3:\n"; - -printf(" %s, \"%s\"\n", $list->get_item(0)->getPosition(), $list->get_item(0)->getTitle()); -printf(" %s, \"%s\"\n", $list->get_item(1)->getPosition(), $list->get_item(1)->getTitle()); -printf(" %s, \"%s\"\n", $list->get_item(2)->getPosition(), $list->get_item(2)->getTitle()); -printf(" %s, \"%s\"\n", $list->get_item(3)->getPosition(), $list->get_item(3)->getTitle()); -print "----------------------\n"; - -# Time to delete the EmployeeList, which will delete all the Employee* -# items it contains. The last item is our CEO, which gets destroyed as its -# reference count goes to zero. The PHP destructor runs, and is still -# able to call the getName() method since the underlying C++ object still -# exists. After this destructor runs the remaining C++ destructors run as -# usual to destroy the object. - -unset($list); -print "----------------------\n"; - -# All done. - -print "php exit\n"; - -?> Copied: branches/gsoc2009-sploving/Examples/php/extend/runme.php (from rev 11488, trunk/Examples/php/extend/runme.php) =================================================================== --- branches/gsoc2009-sploving/Examples/php/extend/runme.php (rev 0) +++ branches/gsoc2009-sploving/Examples/php/extend/runme.php 2009-08-02 01:20:12 UTC (rev 11489) @@ -0,0 +1,76 @@ +<?php + +# This file illustrates the cross language polymorphism using directors. + +require("example.php"); + +# CEO class, which overrides Employee::getPosition(). + +class CEO extends Manager { + function getPosition() { + return "CEO"; + } +} + +# Create an instance of our employee extension class, CEO. The calls to +# getName() and getPosition() are stand... [truncated message content] |
From: <spl...@us...> - 2009-08-04 13:09:05
|
Revision: 11497 http://swig.svn.sourceforge.net/swig/?rev=11497&view=rev Author: sploving Date: 2009-08-04 13:08:44 +0000 (Tue, 04 Aug 2009) Log Message: ----------- Built environment of test-suit and add two test-suit:enum, struct_rename Modified Paths: -------------- branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/scilab/ branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/struct_rename_runme.sci Modified: branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -1,5 +1,5 @@ // builder the *.so -exec builder.sce; +exec example_builder.sce; // loader the *.so exec loader.sce; Modified: branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -1,5 +1,5 @@ // builder the *.so -exec builder.sce; +exec example_builder.sce; // loader the *.so exec loader.sce; Modified: branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -1,5 +1,5 @@ // builder the *.so -exec builder.sce; +exec example_builder.sce; // loader the *.so exec loader.sce; Modified: branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -1,5 +1,5 @@ // builder the *.so -exec builder.sce +exec example_builder.sce // loader the *.so exec loader.sce Modified: branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -1,5 +1,5 @@ // builder the *.so -exec builder.sce +exec example_builder.sce // loader the *.so exec loader.sce Modified: branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -1,5 +1,5 @@ // builder the *.so -exec builder.sce; +exec example_builder.sce; // loader the *.so exec loader.sce; Modified: branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -1,5 +1,5 @@ // builder the *.so -exec builder.sce +exec example_builder.sce //loader the *.so exec loader.sce Modified: branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -1,5 +1,5 @@ // builder the *.so -exec builder.sce +exec example_builder.sce //loader the *.so exec loader.sce Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile 2009-08-04 13:08:44 UTC (rev 11497) @@ -0,0 +1,40 @@ +####################################################################### +# Makefile for scilab test-suite +####################################################################### + +LANGUAGE = scilab +SCILAB = scilab +SCRIPTSUFFIX = _runme.sci +srcdir = . +top_srcdir = ../../.. +top_builddir = ../../.. + +include $(srcdir)/../common.mk + +# Overridden variables here +# none! + +# Rules for the different types of tests +%.cpptest: + +%.ctest: + $(setup) + +$(swig_and_compile_c) + $(run_testcase) + +%.multicpptest: + +# Runs the testcase. A testcase is only run if +# a file is found which has _runme.sci appended after the testcase name. +run_testcase = \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) -nwni < $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \ + fi; \ + + +# Clean: remove the generated .sci file +%.clean: + @rm -f $*.sci *_wrap.c + +clean: + $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile scilab_clean Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile.in (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile.in 2009-08-04 13:08:44 UTC (rev 11497) @@ -0,0 +1,45 @@ +####################################################################### +# Makefile for scilab test-suite +####################################################################### + +LANGUAGE = scilab +SCILAB = @SCILAB@ +SCRIPTSUFFIX = _runme.sci +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ + +C_TEST_CASES += \ + integers \ + + +include $(srcdir)/../common.mk + +# Overridden variables here +# none! + +# Rules for the different types of tests +%.ctest: + $(setup) + +$(swig_and_compile_c) + $(run_testcase) + +%.multicpptest: + $(setup) + +$(swig_and_compile_multi_cpp) + $(run_testcase) + +# Runs the testcase. A testcase is only run if +# a file is found which has _runme.sci appended after the testcase name. +run_testcase = \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \ + fi; \ + + +# Clean: remove the generated .sci file +%.clean: + @rm -f $*.sci *_wrap.c + +clean: + $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile scilab_clean Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -0,0 +1,9 @@ +exec enums_builder.sce +exec loader.sce +exec enums.sce + +bar1(foo1.CSP_ITERATION_BWD) +bar2(foo3.ABCDE) +bar3(foo3.FGHJI) + +exit Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/struct_rename_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/struct_rename_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/struct_rename_runme.sci 2009-08-04 13:08:44 UTC (rev 11497) @@ -0,0 +1,8 @@ +exec struct_rename_builder.sce +exec loader.sce + +a = new_Bar(); +Bar_x_set(100); +Bar_x_get(); + +exit Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-04 10:32:25 UTC (rev 11496) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-04 13:08:44 UTC (rev 11497) @@ -116,7 +116,7 @@ if(hasfunction_flag) { Printf(f_builder_code,"];\n"); Printf(f_builder_code,"ilib_build(ilib_name,table,files,libs);"); - File *f_builder=NewFile(NewStringf("%sbuilder.sce",SWIG_output_directory()),"w",SWIG_output_files()); + File *f_builder=NewFile(NewStringf("%s%s_builder.sce",SWIG_output_directory(),module),"w",SWIG_output_files()); Printv(f_builder,f_builder_code,NIL); Close(f_builder); Delete(f_builder); @@ -363,10 +363,10 @@ String *getname = Swig_name_get(iname); String *setname = Swig_name_set(iname); - Printf(globalVar, "int %s=0;\n", rowname); - Printf(globalVar, "int %s=0;\n", colname); + Printf(globalVar, "int %s = 0;\n", rowname); + Printf(globalVar, "int %s = 0;\n", colname); if(!Strcmp(t, "p.double")) - Printf(globalVar, "int %s=0;\n\n", iscomplexname); + Printf(globalVar, "int %s = 0;\n\n", iscomplexname); else Printf(globalVar, "\n"); Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {\n", NIL); @@ -381,6 +381,8 @@ /* deal with the set function */ if (is_assignable(n)) { Setattr(n, "wrap:name", setname); + if (Getattr(n, "unnamedinstance")) + Setattr(n, "type", "int"); if ((tm = Swig_typemap_lookup("varin", n, name, 0))) { Replaceall(tm, "$argnum", "1"); Replaceall(tm, "iRows", rowname); @@ -461,7 +463,7 @@ String *tempvalue = NewString(""); /* set the value format to be the scilab format */ - if(!Strcmp(type, "char")){ + if (!Strcmp(type, "char")) { value = Getattr(n, "rawvalue"); char *temp = (Char(value)); tempvalue = NewString("ascii"); @@ -469,12 +471,12 @@ value = Copy(tempvalue); Delete(tempvalue); } - else{ - if(!Strcmp(type, "p.char")){ + else { + if (!Strcmp(type, "p.char")) { char *temp = (Char(value)); int len = strlen(temp); - for(int i=0; i<len; ++i){ - if(temp[i] == '\\'){ + for (int i = 0; i < len; ++i) { + if (temp[i] == '\\') { temp[i] = '"'; ++i; } @@ -486,7 +488,7 @@ } /* write into the code string */ - Printf(f_example_code, "example.%s = %s\n", iname, value); + Printf(f_example_code, "%s = %s\n", iname, value); return SWIG_OK; } @@ -515,22 +517,49 @@ String *parentName = Getattr(parentNode(n), "sym:name"); /* set the name to be the enum.enumvalue format */ - String *temp = Copy(parentName); - Printf(temp, ".%s", iname); - Setattr(n, "sym:name", temp); - + if (parentName) { + /*if the enum has a name*/ + if(!Getattr(parentNode(n), "unnamedinstance")) { + String *temp = Copy(parentName); + Printf(temp, ".%s", iname); + Setattr(n, "sym:name", temp); + Delete(temp); + iname = Getattr(n, "sym:name"); + } + } + /* set the value attribute to be the integer */ String *value; String *enumvalue = Getattr(n, "enumvalue"); - if(enumvalue) { - Setattr(n, "value", enumvalue); + if (enumvalue) { + if (Len(enumvalue) == 1) { + char *temp = (Char(enumvalue)); + /*set the value of char into the format of integer*/ + if (((*temp <= 'z') && (*temp >= 'a')) || ((*temp <= 'Z') && (*temp >= 'A'))) { + String *tempInteger = NewString(""); + Printf(tempInteger, "%i", int(*temp)); + Setattr(n, "value", tempInteger); + Delete(tempInteger); + } + else { + Setattr(n, "value", enumvalue); + } + } + else { + Setattr(n, "value", enumvalue); + } } else { - if(n != firstChild(parentNode(n))) { + if (n != firstChild(parentNode(n))) { enumvalue = Getattr(n, "enumvalueex"); - value = Copy(parentName); - Printf(value, ".%s", enumvalue); - Setattr(n, "value", value); + if (parentName) { + if (!Getattr(parentNode(n), "unnamedinstance")) { + String *temp = Copy(parentName); + Printf(temp, ".%s", enumvalue); + enumvalue = Copy(temp); + } + } + Setattr(n, "value", enumvalue); } else { Setattr(n, "value", Getattr(n, "enumvalueex")); @@ -539,8 +568,7 @@ value = Getattr(n, "value"); /* write into the code string */ - Printf(f_example_code, "%s.%s = %s;\n", parentName, iname, value); - + Printf(f_example_code, "%s = %s;\n", iname, value); return SWIG_OK; } }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-08-05 10:59:14
|
Revision: 11503 http://swig.svn.sourceforge.net/swig/?rev=11503&view=rev Author: sploving Date: 2009-08-05 10:59:06 +0000 (Wed, 05 Aug 2009) Log Message: ----------- fix some issue and two test-suit:simple_array, li_math Modified Paths: -------------- branches/gsoc2009-sploving/Examples/scilab/constants/example.i branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/struct_rename_runme.sci branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/scilab/li_math_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/simple_array_runme.sci Modified: branches/gsoc2009-sploving/Examples/scilab/constants/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/example.i 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/constants/example.i 2009-08-05 10:59:06 UTC (rev 11503) @@ -24,4 +24,8 @@ %constant int iconst = 37; %constant double fconst = 3.14; +void constant_test(const int x) { + printf("%i", x); +} + Modified: branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,24 +1,28 @@ +// loader the *.so +exec loader.sce; exec example.sce; -printf("ICONST = %i (should be 42)\n", example.ICONST); -printf("FCONST = %f (should be 2.1828)\n",example. FCONST); -printf("CCONST = %c (should be ''x'')\n", example.CCONST); -printf("CCONST2 = %s (this should be on a new line)\n", example.CCONST2); -printf("SCONST = %s (should be ''Hello World'')\n", example.SCONST); -printf("SCONST2 = %s (should be "'""Hello World"""')\n", example.SCONST2); -printf("EXPR = %f (should be 48.5484)\n",example.EXPR); -printf("iconst = %i (should be 37)\n", example.iconst); -printf("fconst = %f (should be 3.14)\n", example.fconst); +printf("ICONST = %i (should be 42)\n", ICONST); +printf("FCONST = %f (should be 2.1828)\n", FCONST); +printf("CCONST = %c (should be ''x'')\n", CCONST); +printf("CCONST2 = %s (this should be on a new line)\n", CCONST2); +printf("SCONST = %s (should be ''Hello World'')\n", SCONST); +printf("SCONST2 = %s (should be "'""Hello World"""')\n", SCONST2); +printf("EXPR = %f (should be 48.5484)\n", EXPR); +printf("iconst = %i (should be 37)\n", iconst); +printf("fconst = %f (should be 3.14)\n", fconst); try - printf("EXTERN = %s (Arg! This should not printf(anything)\n", example.EXTERN); + printf("EXTERN = %s (Arg! This should not printf(anything)\n", EXTERN); catch printf("EXTERN is not defined (good)\n"); end try - printf("FOO = %i (Arg! This should not printf(anything)\n", example.FOO); + printf("FOO = %i (Arg! This should not printf(anything)\n", FOO); catch printf("FOO is not defined (good)\n"); end +constant_test(iconst); + exit Modified: branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/contract/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,6 +1,3 @@ -// builder the *.so -exec example_builder.sce; - // loader the *.so exec loader.sce; @@ -13,7 +10,7 @@ // Call our fact() function x=5; g=fact(x); -printf("The fact of %d is %d",x,g); +printf("The fact of %d is %d\n",x,g); // Manipulate the Foo global variable @@ -26,12 +23,6 @@ // See if the change took effect printf("Foo = %f\n", Foo_get()); -//Call our gcd() function to test the contract conditon -x=-42; -y=105; -g=gcd(x,y); -printf("The gcd of %d and %d is %d\n",x,y,g); - exit Modified: branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,6 +1,3 @@ -// builder the *.so -exec example_builder.sce; - // loader the *.so exec loader.sce; Modified: branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/funcptr/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,6 +1,3 @@ -// builder the *.so -exec example_builder.sce; - // loader the *.so exec loader.sce; Modified: branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/matrix/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,6 +1,3 @@ -// builder the *.so -exec example_builder.sce - // loader the *.so exec loader.sce Modified: branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,6 +1,3 @@ -// builder the *.so -exec example_builder.sce - // loader the *.so exec loader.sce Modified: branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/simple/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,6 +1,3 @@ -// builder the *.so -exec example_builder.sce; - // loader the *.so exec loader.sce; @@ -20,7 +17,7 @@ Foo_set(3.1415926) // See if the change took effect -Foo_get() +if Foo_get() <> 3.1415926 then pause,end exit Modified: branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/struct/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,6 +1,3 @@ -// builder the *.so -exec example_builder.sce - //loader the *.so exec loader.sce Modified: branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/scilab/variables/runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,6 +1,3 @@ -// builder the *.so -exec example_builder.sce - //loader the *.so exec loader.sce Modified: branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile 2009-08-05 10:59:06 UTC (rev 11503) @@ -28,7 +28,7 @@ # a file is found which has _runme.sci appended after the testcase name. run_testcase = \ if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) -nwni < $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) -nwni -nb -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \ fi; \ Modified: branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,4 +1,3 @@ -exec enums_builder.sce exec loader.sce exec enums.sce Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/li_math_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/li_math_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/li_math_runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -0,0 +1,7 @@ +exec loader.sce; +exec li_math.sce; + +x = fmod(M_PI, M_1_PI) + +exit + Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/simple_array_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/simple_array_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/simple_array_runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -0,0 +1,7 @@ +exec loader.sce + +initArray(); +x_get() +y_get() + +exit Modified: branches/gsoc2009-sploving/Examples/test-suite/scilab/struct_rename_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/struct_rename_runme.sci 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/struct_rename_runme.sci 2009-08-05 10:59:06 UTC (rev 11503) @@ -1,8 +1,7 @@ -exec struct_rename_builder.sce exec loader.sce a = new_Bar(); -Bar_x_set(100); -Bar_x_get(); +Bar_x_set(a,100); +if Bar_x_get(a) <> 100 then pause,end exit Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-08-05 10:59:06 UTC (rev 11503) @@ -94,11 +94,7 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); - if($1 != NULL) { - free($1); - } - $1=($1_ltype)malloc(iRows*iCols*sizeof($*1_ltype)); - for(index = 0; index < iRows * iCols; index++) { + for(index = 0; index < $1_dim0; index++) { $1[index] = ($*1_ltype)_piData[index]; } } @@ -114,11 +110,7 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); - if($1 != NULL) { - free($1); - } - $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); - for(index = 0; index < iRows * iCols; index++) { + for(index = 0; index < $1_dim0; index++) { $1[index] = ($*1_ltype)_piData[index]; } } @@ -137,11 +129,7 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); - if($1 != NULL) { - free($1); - } - $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); - for(index = 0; index < iRows * iCols; index++) { + for(index = 0; index < $1_dim0; index++) { $1[index] = ($*1_ltype)_piData[index]; } } @@ -157,11 +145,7 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); - if($1 != NULL) { - free($1); - } - $1 = ($1_ltype)malloc(iRows * iCols * sizeof($*1_ltype)); - for(index = 0; index < iRows * iCols; index++){ + for(index = 0; index < $1_dim0; index++){ $1[index] = ($*1_ltype)_piData[index]; } } @@ -479,6 +463,114 @@ free(_pstStrings); } +%typemap(varin,noblock=1) signed char [ANY] { + char *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfInteger8(piAddrVar, &iRows, &iCols, &_piData); + for(index = 0; index < $1_dim0; index++) { + $1[index] = ($*1_ltype)_piData[index]; + } +} + +%typemap(varin,noblock=1) unsigned char [ANY] { + short *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfUnsignedInteger8(piAddrVar, &iRows, &iCols, &_piData); + for(index = 0; index < $1_dim0; index++) { + $1[index] = ($*1_ltype)_piData[index]; + } +} + +%typemap(varin,noblock=1) short [ANY] { + short *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfInteger16(piAddrVar, &iRows, &iCols, &_piData); + for(index = 0; index < $1_dim0; index++) { + $1[index] = ($*1_ltype)_piData[index]; + } +} + +%typemap(varin,noblock=1) unsigned short [ANY] { + short *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfUnsignedInteger16(piAddrVar, &iRows, &iCols, &_piData); + for(index = 0; index < $1_dim0; index++) { + $1[index] = ($*1_ltype)_piData[index]; + } +} + +%typemap(varin,noblock=1) int [ANY], + long [ANY] { + int *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); + for(index = 0; index < $1_dim0; index++) { + $1[index] = ($*1_ltype)_piData[index]; + } +} + +%typemap(varin,noblock=1) unsigned int [ANY], + unsigned long [ANY] { + int *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfUnsignedInteger32(piAddrVar, &iRows, &iCols, &_piData); + for(index = 0; index < $1_dim0; index++) { + $1[index] = ($*1_ltype)_piData[index]; + } +} + +%typemap(varin,noblock=1) double [ANY], + float [ANY] { + double *_piData; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_matrix || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfDouble(piAddrVar, &iRows, &iCols, &_piData); + for(index = 0; index < $1_dim0; index++){ + $1[index] = ($*1_ltype)_piData[index]; + } +} + %typemap(varin,noblock=1) signed char *, short *, unsigned char *, @@ -533,6 +625,20 @@ $1 = ($1_ltype)_piData; } +%typemap(varin,noblock=1) SWIGTYPE [ANY] (int *piAddrVar) { + void *_piData = NULL; + int index; + getVarAddressFromPosition($argnum, &piAddrVar); + + if (getVarType(piAddrVar) != sci_lufact_pointer) { + Scierror(999, _("%s: Wrong type for input argument #%d: Pointer expected.\n"), fname, $argnum); + } + getPointer(piAddrVar, &_piData); + for(index = 0; index < $1_dim0; index++){ + $1[index] = (($1_ltype)_piData)[index]; + } +} + %typemap(varin,nobloack=1) SWIGTYPE { void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); @@ -627,6 +733,50 @@ } +%typemap(varout,noblock=1) signed char [ANY] { + createMatrixOfInteger8(iVarOut, 1, $1_dim0, (char *)$result); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(varout,noblock=1) unsigned char [ANY] { + createMatrixOfUnsignedInteger8(iVarOut, 1, $1_dim0, (unsigned char *)$result); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(varout,noblock=1) short [ANY] { + createMatrixOfInteger16(iVarOut, 1, $1_dim0, (short *)$result); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(varout,noblock=1) unsigned short [ANY] { + createMatrixOfUnsignedInteger16(iVarOut, 1, $1_dim0, (unsigned short *)$result); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(varout,noblock=1) int [ANY], + long [ANY] { + createMatrixOfInteger32(iVarOut, 1, $1_dim0, (int *)$result); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(varout,noblock=1) unsigned int [ANY], + unsigned long [ANY] { + createMatrixOfUnsignedInteger32(iVarOut, 1, $1_dim0, (unsigned int *)$result); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(varout,noblock=1) double [ANY] { + createMatrixOfDouble(iVarOut, 1, $1_dim0, (double *)$result); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(varout,noblock=1) float [ANY] { + double temp; + temp = (double)$result; + createMatrixOfDouble(iVarOut, 1, $1_dim0, (double *)&temp); + LhsVar(iOutNum) = iVarOut; +} + %typemap(varout,noblock=1) char ** { char **pstData = NULL; pstData = (char **)malloc(iRowsOut * iColsOut * sizeof(char*)); @@ -640,7 +790,6 @@ LhsVar(iOutNum) = iVarOut; } - %typemap(varout,noblock=1) SWIGTYPE { createPointer(iVarOut, (void *)&$result); LhsVar(iOutNum) = iVarOut; Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-05 09:26:25 UTC (rev 11502) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-05 10:59:06 UTC (rev 11503) @@ -104,9 +104,9 @@ Printf(f_runtime, "#include \"localization.h\"\n"); /* Initialize the builder.sce file code */ - Printf(f_builder_code,"ilib_name = \"%slib\";\n",module); - Printf(f_builder_code,"files = [\"%s\",\"%s.o\"];\n", outfile,module); - Printf(f_builder_code,"libs = [];\n"); + Printf(f_builder_code, "ilib_name = \"%slib\";\n", module); + Printf(f_builder_code, "files = [\"%s\",\"%s.o\"];\n", outfile, module); + Printf(f_builder_code, "libs = [];\n"); Printf(f_builder_code, "table = ["); /* Emit code for children */ @@ -114,10 +114,11 @@ /* create the file to generate the module: "builder.sce" */ if(hasfunction_flag) { - Printf(f_builder_code,"];\n"); - Printf(f_builder_code,"ilib_build(ilib_name,table,files,libs);"); - File *f_builder=NewFile(NewStringf("%s%s_builder.sce",SWIG_output_directory(),module),"w",SWIG_output_files()); - Printv(f_builder,f_builder_code,NIL); + Printf(f_builder_code, "];\n"); + Printf(f_builder_code, "ilib_build(ilib_name,table,files,libs);\n"); + Printf(f_builder_code, "exit"); + File *f_builder=NewFile(NewStringf("%sbuilder.sce", SWIG_output_directory()), "w", SWIG_output_files()); + Printv(f_builder, f_builder_code, NIL); Close(f_builder); Delete(f_builder); Delete(f_builder_code); @@ -128,8 +129,8 @@ /* create the file for constants: "module.sce" */ if(hasconstant_flag) { - File *f_example=NewFile(NewStringf("%s%s.sce",SWIG_output_directory(),module),"w",SWIG_output_files()); - Printv(f_example,f_example_code,NIL); + File *f_example = NewFile(NewStringf("%s%s.sce", SWIG_output_directory(), module), "w", SWIG_output_files()); + Printv(f_example, f_example_code, NIL); Close(f_example); Delete(f_example); Delete(f_example_code); @@ -363,8 +364,8 @@ String *getname = Swig_name_get(iname); String *setname = Swig_name_set(iname); - Printf(globalVar, "int %s = 0;\n", rowname); - Printf(globalVar, "int %s = 0;\n", colname); + Printf(globalVar, "int %s = 1;\n", rowname); + Printf(globalVar, "int %s = 1;\n", colname); if(!Strcmp(t, "p.double")) Printf(globalVar, "int %s = 0;\n\n", iscomplexname); else @@ -372,8 +373,8 @@ Printv(setf->def, "int ", setname, " (char *fname,unsigned long fname_len) {\n", NIL); /* Check the number of input and output */ - Printf(setf->def, "CheckRhs(1,1);\n"); - Printf(setf->def, "CheckLhs(1,1);\n"); + Printf(setf->def, "CheckRhs(1, 1);\n"); + Printf(setf->def, "CheckLhs(1, 1);\n"); /* add the local variable */ Wrapper_add_local(setf, "piAddrVar", "int *piAddrVar"); @@ -467,7 +468,7 @@ value = Getattr(n, "rawvalue"); char *temp = (Char(value)); tempvalue = NewString("ascii"); - Printf(tempvalue, "(%i)", (int)*temp); + Printf(tempvalue, "(%d)", (unsigned int)*temp); value = Copy(tempvalue); Delete(tempvalue); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-08-06 12:36:40
|
Revision: 11511 http://swig.svn.sourceforge.net/swig/?rev=11511&view=rev Author: sploving Date: 2009-08-06 12:36:25 +0000 (Thu, 06 Aug 2009) Log Message: ----------- add li_cpointer and newobject2 test-suite Modified Paths: -------------- branches/gsoc2009-sploving/Examples/scilab/constants/example.i branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/scilab/li_cpointer_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/newobject2_runme.sci branches/gsoc2009-sploving/Lib/scilab/cmalloc.i Modified: branches/gsoc2009-sploving/Examples/scilab/constants/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/example.i 2009-08-06 12:27:03 UTC (rev 11510) +++ branches/gsoc2009-sploving/Examples/scilab/constants/example.i 2009-08-06 12:36:25 UTC (rev 11511) @@ -24,8 +24,10 @@ %constant int iconst = 37; %constant double fconst = 3.14; +%inline %{ void constant_test(const int x) { printf("%i", x); } +%} Modified: branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-08-06 12:27:03 UTC (rev 11510) +++ branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-08-06 12:36:25 UTC (rev 11511) @@ -23,6 +23,4 @@ printf("FOO is not defined (good)\n"); end -constant_test(iconst); - exit Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/li_cpointer_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/li_cpointer_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/li_cpointer_runme.sci 2009-08-06 12:36:25 UTC (rev 11511) @@ -0,0 +1,8 @@ +exec loader.sce; + +p = new_intp(); +intp_assign(p,3); + +if intp_value(p) <> 3 then pause, end + +exit Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/newobject2_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/newobject2_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/newobject2_runme.sci 2009-08-06 12:36:25 UTC (rev 11511) @@ -0,0 +1,15 @@ +exec loader.sce; + +x = makeFoo(); +if fooCount() <> 1 then pause, end + +y = makeFoo(); +if fooCount() <> 2 then pause, end + +delete_Foo(x); +if fooCount() <> 1 then pause, end + +delete_Foo(y); +if fooCount() <> 0 then pause, end + +exit Added: branches/gsoc2009-sploving/Lib/scilab/cmalloc.i =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/cmalloc.i (rev 0) +++ branches/gsoc2009-sploving/Lib/scilab/cmalloc.i 2009-08-06 12:36:25 UTC (rev 11511) @@ -0,0 +1 @@ +%include <typemaps/cmalloc.swg> Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-08-06 12:27:03 UTC (rev 11510) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-08-06 12:36:25 UTC (rev 11511) @@ -16,16 +16,17 @@ * ----------------------------------------------------------------------------- */ /* Basic C types */ -%typemap(in) signed char (int *piAddrVar, int iRows, int iCols), - unsigned char (int *piAddrVar, int iRows, int iCols), - short (int *piAddrVar, int iRows, int iCols), - unsigned short (int *piAddrVar, int iRows, int iCols), - int (int *piAddrVar, int iRows, int iCols), - unsigned int (int *piAddrVar, int iRows, int iCols), - long (int *piAddrVar, int iRows, int iCols), - unsigned long (int *piAddrVar, int iRows, int iCols), - float (int *piAddrVar, int iRows, int iCols), - double (int *piAddrVar, int iRows, int iCols) { +%typemap(in) signed char (int iRows, int iCols), + unsigned char (int iRows, int iCols), + short (int iRows, int iCols), + unsigned short (int iRows, int iCols), + int (int iRows, int iCols), + unsigned int (int iRows, int iCols), + long (int iRows, int iCols), + unsigned long (int iRows, int iCols), + float (int iRows, int iCols), + double (int iRows, int iCols) { + int *piAddrVar; double *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -37,7 +38,8 @@ $1 = ($1_ltype)*_piData; } -%typemap(in) char (int *piAddrVar, int iRows, int iCols) { +%typemap(in) char (int iRows, int iCols) { + int *piAddrVar; char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); @@ -51,16 +53,17 @@ } /* Pointers */ -%typemap(in) signed char * (int *piAddrVar), - short * (int *piAddrVar), - unsigned char * (int *piAddrVar), - unsigned short * (int *piAddrVar), - int * (int *piAddrVar), - unsigned int * (int *piAddrVar), - long * (int *piAddrVar), - unsigned long * (int *piAddrVar), - double * (int *piAddrVar), - float * (int *piAddrVar) { +%typemap(in) signed char *, + short *, + unsigned char *, + unsigned short *, + int *, + unsigned int *, + long *, + unsigned long *, + double *, + float * { + int *piAddrVar; void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); @@ -71,7 +74,8 @@ $1 = ($1_ltype)_piData; } -%typemap(in) char * (int *piAddrVar, int iRows, int iCols){ +%typemap(in) char * (int iRows, int iCols){ + int *piAddrVar; char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); @@ -84,7 +88,8 @@ $1 = strdup(_pstStrings); } -%typemap(in) signed char [ANY] (int *piAddrVar, int iRows, int iCols) { +%typemap(in) signed char [ANY] (int iRows, int iCols) { + int *piAddrVar; char *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); @@ -99,8 +104,9 @@ } } -%typemap(in) short [ANY] (int *piAddrVar, int iRows, int iCols), - unsigned char [ANY] (int *piAddrVar, int iRows, int iCols) { +%typemap(in) short [ANY] (int iRows, int iCols), + unsigned char [ANY] (int iRows, int iCols) { + int *piAddrVar; short *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); @@ -115,11 +121,12 @@ } } -%typemap(in) unsigned short [ANY] (int *piAddrVar, int iRows, int iCols), - int [ANY] (int *piAddrVar, int iRows, int iCols), - unsigned int [ANY] (int *piAddrVar, int iRows, int iCols), - long [ANY] (int *piAddrVar, int iRows, int iCols), - unsigned long [ANY] (int *piAddrVar, int iRows, int iCols) { +%typemap(in) unsigned short [ANY] (int iRows, int iCols), + int [ANY] (int iRows, int iCols), + unsigned int [ANY] (int iRows, int iCols), + long [ANY] (int iRows, int iCols), + unsigned long [ANY] (int iRows, int iCols) { + int *piAddrVar; int *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); @@ -134,8 +141,9 @@ } } -%typemap(in) double [ANY] (int *piAddrVar, int iRows, int iCols), - float [ANY] (int *piAddrVar, int iRows, int iCols){ +%typemap(in) double [ANY] (int iRows, int iCols), + float [ANY] (int iRows, int iCols) { + int *piAddrVar; double *_piData; int index; getVarAddressFromPosition($argnum, &piAddrVar); @@ -150,7 +158,8 @@ } } -%typemap(in) char [ANY] (int *piAddrVar, int iRows, int iCols){ +%typemap(in) char [ANY] (int iRows, int iCols) { + int *piAddrVar; char *_pstStrings; int _piLength; getVarAddressFromPosition($argnum, &piAddrVar); @@ -164,7 +173,8 @@ } /* Arrays */ -%typemap(in) signed char [ANY][ANY] (int *piAddrVar, int iRows, int iCols) { +%typemap(in) signed char [ANY][ANY] (int iRows, int iCols) { + int *piAddrVar; char *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -186,8 +196,9 @@ } } -%typemap(in) short [ANY][ANY] (int *piAddrVar, int iRows, int iCols), - unsigned char [ANY][ANY] (int *piAddrVar, int iRows, int iCols) { +%typemap(in) short [ANY][ANY] (int iRows, int iCols), + unsigned char [ANY][ANY] (int iRows, int iCols) { + int *piAddrVar; short *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -209,11 +220,12 @@ } } -%typemap(in) unsigned short [ANY][ANY] (int *piAddrVar, int iRows, int iCols), - int [ANY][ANY] (int *piAddrVar, int iRows, int iCols), - unsigned int [ANY][ANY] (int *piAddrVar, int iRows, int iCols), - long [ANY][ANY] (int *piAddrVar, int iRows, int iCols), - unsigned long [ANY][ANY] (int *piAddrVar, int iRows, int iCols){ +%typemap(in) unsigned short [ANY][ANY] (int iRows, int iCols), + int [ANY][ANY] (int iRows, int iCols), + unsigned int [ANY][ANY] (int iRows, int iCols), + long [ANY][ANY] (int iRows, int iCols), + unsigned long [ANY][ANY] (int iRows, int iCols){ + int *piAddrVar; int *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -236,8 +248,9 @@ } -%typemap(in) double [ANY][ANY] (int *piAddrVar, int iRows, int iCols), - float [ANY][ANY] (int *piAddrVar, int iRows, int iCols) { +%typemap(in) double [ANY][ANY] (int iRows, int iCols), + float [ANY][ANY] (int iRows, int iCols) { + int *piAddrVar; double *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -259,7 +272,8 @@ } } -%typemap(in) SWIGTYPE * (int *piAddrVar) { +%typemap(in) SWIGTYPE * { + int *piAddrVar; void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); @@ -271,6 +285,7 @@ } %typemap(in) SWIGTYPE { + int *piAddrVar; void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); @@ -614,7 +629,7 @@ $1 = _pstStrings; } -%typemap(varin,noblock=1) SWIGTYPE *(int *piAddrVar) { +%typemap(varin,noblock=1) SWIGTYPE * { void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); @@ -625,7 +640,7 @@ $1 = ($1_ltype)_piData; } -%typemap(varin,noblock=1) SWIGTYPE [ANY] (int *piAddrVar) { +%typemap(varin,noblock=1) SWIGTYPE [ANY] { void *_piData = NULL; int index; getVarAddressFromPosition($argnum, &piAddrVar); @@ -800,3 +815,4 @@ * ------------------------------------------------------------ */ %apply int { enum SWIGTYPE }; +%apply int { size_t }; Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-06 12:27:03 UTC (rev 11510) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-06 12:36:25 UTC (rev 11511) @@ -234,8 +234,11 @@ p = nextSibling(p); continue; } - String *getargs = NewString(""); - Printv(getargs, tm, NIL); + String *getargs = NewString(""); + if (j >= num_required) + Printf(getargs, "if (Rhs > %d) {\n%s\n}", j, tm); + else + Printv(getargs, tm, NIL); Printv(f->code, getargs, "\n", NIL); Delete(getargs); p = Getattr(p, "tmap:in:next"); @@ -307,7 +310,7 @@ else { flag = 1; } - Printf(f->def, "CheckRhs(%d, %d);\n",num_required,num_required); + Printf(f->def, "CheckRhs(%d, %d);\n",num_required,num_arguments); Printf(f->def, "CheckLhs(%d, %d);\n",out_required,out_required); /* Insert the order of output parameters*/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-08-08 13:25:40
|
Revision: 11515 http://swig.svn.sourceforge.net/swig/?rev=11515&view=rev Author: sploving Date: 2009-08-08 13:25:29 +0000 (Sat, 08 Aug 2009) Log Message: ----------- a better way to deal with constants and enums and some change about the doc Modified Paths: -------------- branches/gsoc2009-sploving/Doc/Manual/Scilab.html branches/gsoc2009-sploving/Examples/scilab/constants/example.i branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci branches/gsoc2009-sploving/Examples/scilab/enum/example.c branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/li_math_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/simple_array_runme.sci branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Modified: branches/gsoc2009-sploving/Doc/Manual/Scilab.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Doc/Manual/Scilab.html 2009-08-08 13:25:29 UTC (rev 11515) @@ -27,6 +27,7 @@ <li><a href="#Scilab_nn12">Enums</a> <li><a href="#Scilab_nn13">Pointers</a> <li><a href="#Scilab_nn14">Structs</a> +<li><a href="#Scilab_nn15">Arrays</a> </ul> </ul> </div> @@ -194,7 +195,7 @@ <div class="targetlang"><pre>Scilab:1>fact(4) ant=24 </pre></div> -<H3><a name="scilab_nn10"></a>27.3.3 Global variables</H3> +<H3><a name="scilab_nn10"></a>36.3.3 Global variables</H3> <p> To expose variables, SWIG actually generates two functions, to get and set the value. In this case, Foo_set and Foo_get would be generated. SWIG then automatically calls these functions when you get and set the variable-- in the former case creating a local copy in the interpreter of the C variables, and in the latter case copying an interpreter variables onto the C variable. @@ -210,27 +211,12 @@ scilab:5> Foo_get() ans = 4 - -scilab:6> Foo_set([1,2,3;4,5,6]); - -scilab:7> Foo_get() -ans = - - 1. 2. 3. - 4. 5. 6. -scilab:8> Foo_set([1+2*%i,2+3*%i;3+4*%i,7+8*%i]); - -scilab:9> Foo_get() - ans = - - 1. + 2.i 2. + 3.i - 3. + 4.i 7. + 8.i </pre></div> -<H3><a name="Scilab_nn11"></a>27.3.4 Constants</H3> +<H3><a name="Scilab_nn11"></a>36.3.4 Constants</H3> <p> - C constants are not really constant in Scilab. They are actually just a copy of the value into the Scilab interpreter. Therefore they can be changed just as any other value. For example given some constants: + C constants are not really constant in Scilab. When dealing with the constants, the get function will be generated. For example given some constants: </p> <div class="code"><pre>%module example @@ -242,47 +228,32 @@ #define SCONST2 "\"Hello World\"" </pre></div> -<p> - A file called example.sce will be created, which could be interpreted by the scilab. The code in the file is as following: -</p> +<p>It is easy to use them in Scilab:</p> - <div class="code"><pre>.... -example.ICONST = 42 -example.FCONST = 2.1828 -example.CCONST = ascii(120) -example.CCONST2 = ascii(10) -example.SCONST = "Hello World" -example.SCONST2 = """Hello World""" -example.EXPR = 42+3*(2.1828) -example.iconst = 37 -example.fconst = 3.14 -.... </pre></div> -<p>It is easy to use the C constants after run the command "exec example.sce":</p> - <div class="targetlang"><pre> -scilab:1> exec example.sce; -scilab:2> example.ICONST +scilab:1> exec loader.sce; +scilab:2> ICONST_get(); ans= 42 -scilab:3> example.FCONST +scilab:3> FCONST_get(); ans= 2.1828 -scilab:4> example.CCONST +scilab:4> CCONST_get(); ans=x -scilab:5> example.CCONST2 +scilab:5> CCONST2_get(); ans= -scilab:6> example.SCONST +scilab:6> SCONST_get(); ans= Hello World -scilab:7> example.SCONST2 +scilab:7> SCONST2_get(); ans= "Hello World" -scilab:8> example.EXPR +scilab:8> EXPR_get(); ans= 48.5484 -scilab:9> example.iconst +scilab:9> iconst_get(); ans= 37 -scilab:10> example.fconst +scilab:10> fconst_get(); ans= 3.14 </pre></div> -<H3><a name="Scilab_nn12"></a>27.3.5 Enums</H3> +<H3><a name="Scilab_nn12"></a>36.3.5 Enums</H3> <p> The way that deals with the enums is similar to the constants. For example: </p> @@ -292,30 +263,24 @@ </pre></div> <p> - A file called example.sce will be created, which could be interpreted by the scilab. The code in the file is as following: + Some code like RED_get(), BLUE_get(),GREEN_get() will be generated. So it could be used as the following: </p> - <div class="code"><pre>.... -color.RED=0; -color.BLUE=color.RED + 1; -color.GREEN=color.BLUE + 1; -.... </pre></div> -<p>It is easy to use the enums after run the command "exec example.sce":</p> <div class="targetlang"><pre> -scilab:1> exec example.sce; -scilab:2> printf(" RED = %i\n", color.RED); +scilab:1> exec loader.sce; +scilab:2> printf(" RED = %i\n", RED_get()); RED = 0 -scilab:3> printf(" BLUE = %i\n", color.BLUE); +scilab:3> printf(" BLUE = %i\n", BLUE_get()); BLUE = 1 -scilab:4> printf(" GREEN = %i\n", color.GREEN); +scilab:4> printf(" GREEN = %i\n", GREEN_get()); GREEN = 2 </pre></div> -<H3><a name="Scilab_nn13"></a>27.3.5 Pointers</H3> +<H3><a name="Scilab_nn13"></a>36.3.6 Pointers</H3> <p> Pointers are fully supported by SWIG. One way to deal with the pointers is using the INPUT and OUTPUT typemaps. For example, in order to call C functions as the following: </p> @@ -356,7 +321,7 @@ we only need a real value instead. </p> -<H3><a name="Scilab_nn14"></a>27.3.6 Structs</H3> +<H3><a name="Scilab_nn14"></a>36.3.7 Structs</H3> <p> SWIG creates a set of accessor functions when encountering a structure or union. For example: </p> @@ -371,14 +336,53 @@ <p> When wrappered, it would generate two main function: Foo_x_set(), which set the data value of the structrure and Foo_x_get() which could obtain the value of the structrure. Run it in Scilab: </p> <div class="targetlang"><pre> -a=new_Foo(); -Foo_x_set(a,100); -Foo_x_get(a) +scilab:1> a=new_Foo(); +scilab:2> Foo_x_set(a,100); +scilab:3> Foo_x_get(a) ans = 100 </pre></div> +<H3><a name="Scilab_nn15"></a>36.3.8 Arrays</H3> +<p> + Arrays are fully supported by SWIG and Scilab. In SWIG, they are handled as pointers. And Scilab also supports the pointer well. So it is easy to deal with the arrays. For example: +</p> + <div class="code"><pre>%module example +%inline %{ +int x[10]; +double y[7]; +void initArray() +{ + int i, n; + n = sizeof(x)/sizeof(x[0]); + for(i = 0; i < n; i++) + x[i] = i; + n = sizeof(y)/sizeof(y[0]); + for(i = 0; i < n; i++) + y[i] = ((double) i)/ ((double) n); + return; +%} +</pre></div> +<p> When wrappered, it would generate the following funtion: x_set(), x_get(), y_set(), y_get(), and _wrap_initArray. So it could be used like this: +</p> + <div class="targetlang"><pre> +scilab:1> exec loader.sce + +scilab:2> initArray(); +scilab:3> x_get() +ans = + + 0 1 2 3 4 5 6 7 8 9 +scilab:4>y_get() +ans = + + 0. 0.1428571 0.2857143 0.4285714 0.5714286 0.7142857 0.8571429 +</pre></div> + + + + Modified: branches/gsoc2009-sploving/Examples/scilab/constants/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/example.i 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Examples/scilab/constants/example.i 2009-08-08 13:25:29 UTC (rev 11515) @@ -24,10 +24,5 @@ %constant int iconst = 37; %constant double fconst = 3.14; -%inline %{ -void constant_test(const int x) { - printf("%i", x); -} -%} Modified: branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Examples/scilab/constants/runme.sci 2009-08-08 13:25:29 UTC (rev 11515) @@ -1,24 +1,23 @@ // loader the *.so exec loader.sce; -exec example.sce; -printf("ICONST = %i (should be 42)\n", ICONST); -printf("FCONST = %f (should be 2.1828)\n", FCONST); -printf("CCONST = %c (should be ''x'')\n", CCONST); -printf("CCONST2 = %s (this should be on a new line)\n", CCONST2); -printf("SCONST = %s (should be ''Hello World'')\n", SCONST); -printf("SCONST2 = %s (should be "'""Hello World"""')\n", SCONST2); -printf("EXPR = %f (should be 48.5484)\n", EXPR); -printf("iconst = %i (should be 37)\n", iconst); -printf("fconst = %f (should be 3.14)\n", fconst); +printf("ICONST = %i (should be 42)\n", ICONST_get()); +printf("FCONST = %f (should be 2.1828)\n", FCONST_get()); +printf("CCONST = %c (should be ''x'')\n", CCONST_get()); +printf("CCONST2 = %s (this should be on a new line)\n", CCONST2_get()); +printf("SCONST = %s (should be ''Hello World'')\n", SCONST_get()); +printf("SCONST2 = %s (should be "'""Hello World"""')\n", SCONST2_get()); +printf("EXPR = %f (should be 48.5484)\n", EXPR_get()); +printf("iconst = %i (should be 37)\n", iconst_get()); +printf("fconst = %f (should be 3.14)\n", fconst_get()); try - printf("EXTERN = %s (Arg! This should not printf(anything)\n", EXTERN); + printf("EXTERN = %s (Arg! This should not printf(anything)\n", EXTERN_get()); catch printf("EXTERN is not defined (good)\n"); end try - printf("FOO = %i (Arg! This should not printf(anything)\n", FOO); + printf("FOO = %i (Arg! This should not printf(anything)\n", FOO_get()); catch printf("FOO is not defined (good)\n"); end Modified: branches/gsoc2009-sploving/Examples/scilab/enum/example.c =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/example.c 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Examples/scilab/enum/example.c 2009-08-08 13:25:29 UTC (rev 11515) @@ -5,12 +5,12 @@ void enum_test(color c) { if (c == RED) { - sciprint("color = RED, "); + printf("color = RED\n"); } else if (c == BLUE) { - sciprint("color = BLUE, "); + printf("color = BLUE\n "); } else if (c == GREEN) { - sciprint("color = GREEN, "); + printf("color = GREEN\n"); } else { - sciprint("color = Unknown color!, "); + printf("color = Unknown color!\n"); } } Modified: branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Examples/scilab/enum/runme.sci 2009-08-08 13:25:29 UTC (rev 11515) @@ -1,21 +1,19 @@ // loader the *.so exec loader.sce; -exec example.sce; - // Print out the value of some enums printf("*** color ***\n"); -printf(" RED = %i\n", color.RED); -printf(" BLUE = %i\n", color.BLUE); -printf(" GREEN = %i\n", color.GREEN); +printf(" RED = %i\n", RED_get()); +printf(" BLUE = %i\n", BLUE_get()); +printf(" GREEN = %i\n", GREEN_get()); printf("\nTesting use of enums with functions\n"); -enum_test(color.RED); -enum_test(color.BLUE); -enum_test(color.GREEN); -enum_test(1234); +enum_test(RED_get()); +enum_test(BLUE_get()); +enum_test(GREEN_get()); +enum_test(int32(1234)); exit Modified: branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/enums_runme.sci 2009-08-08 13:25:29 UTC (rev 11515) @@ -1,8 +1,7 @@ exec loader.sce -exec enums.sce -bar1(foo1.CSP_ITERATION_BWD) -bar2(foo3.ABCDE) -bar3(foo3.FGHJI) +bar1(CSP_ITERATION_BWD_get()) +bar2(ABCDE_get()) +bar3(FGHJI_get()) exit Modified: branches/gsoc2009-sploving/Examples/test-suite/scilab/li_math_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/li_math_runme.sci 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/li_math_runme.sci 2009-08-08 13:25:29 UTC (rev 11515) @@ -1,7 +1,6 @@ exec loader.sce; -exec li_math.sce; -x = fmod(M_PI, M_1_PI) +x = fmod(M_PI_get(), M_1_PI_get()) exit Modified: branches/gsoc2009-sploving/Examples/test-suite/scilab/simple_array_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/simple_array_runme.sci 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/simple_array_runme.sci 2009-08-08 13:25:29 UTC (rev 11515) @@ -1,7 +1,7 @@ exec loader.sce initArray(); -x_get() -y_get() +if x_get() <> int32([0,1,2,3,4,5,6,7,8,9]) then pause, end +if y_get() <> [0/7,1/7,2/7,3/7,4/7,5/7,6/7] then pase, end exit Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-08-08 13:25:29 UTC (rev 11515) @@ -272,6 +272,19 @@ } } +%typemap(in) enum SWIGTYPE (int iRows, int iCols) { + int *piAddrVar; + int *_piData; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); + $1 = ($1_ltype)*_piData; +} + %typemap(in) SWIGTYPE * { int *piAddrVar; void *_piData = NULL; @@ -371,6 +384,7 @@ %typemap(out,noblock=1) void { } + /* Pointers */ %typemap(out) signed char *, short *, @@ -397,6 +411,15 @@ if ($1) free($1); } +%typemap(out) enum SWIGTYPE (int iRowsOut, int iColsOut) { + int temp; + temp = (int)($result); + iRowsOut = 1; + iColsOut = 1; + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp); + LhsVar(iOutNum) = iVarOut; +} + %typemap(out) SWIGTYPE * { createPointer(iVarOut, (void *)$result); LhsVar(iOutNum) = iVarOut; @@ -420,7 +443,9 @@ long, unsigned long, float, - double { + double, + long long, + unsigned long long { double *_piData; getVarAddressFromPosition($argnum, &piAddrVar); getVarDimension(piAddrVar, &iRows, &iCols); @@ -629,6 +654,17 @@ $1 = _pstStrings; } +%typemap(varin,noblock=1) enum SWIGTYPE { + int *_piData; + getVarAddressFromPosition($argnum, &piAddrVar); + getVarDimension(piAddrVar, &iRows, &iCols); + + if (getVarType(piAddrVar) != sci_ints || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { + Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); + } + getMatrixOfInteger32(piAddrVar, &iRows, &iCols, &_piData); + $1 = ($1_ltype)*_piData; +} %typemap(varin,noblock=1) SWIGTYPE * { void *_piData = NULL; getVarAddressFromPosition($argnum, &piAddrVar); @@ -670,58 +706,79 @@ * ----------------------------------------------------------------------------- */ /* Basic C types */ %typemap(varout,noblock=1) signed char { - createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &$result); + signed char temp = $result; + createMatrixOfInteger8(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) unsigned char { - createMatrixOfUnsignedInteger8(iVarOut, iRowsOut, iColsOut, &$result); + unsigned char temp = $result; + createMatrixOfUnsignedInteger8(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) short { - createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &$result); + short temp = $result; + createMatrixOfInteger16(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) unsigned short { - createMatrixOfUnsignedInteger16(iVarOut, iRowsOut, iColsOut, &$result); + unsigned short temp = $result; + createMatrixOfUnsignedInteger16(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) int, long { - createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &$result); + int temp = $result; + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) unsigned int, unsigned long { - createMatrixOfUnsignedInteger32(iVarOut, iRowsOut, iColsOut, &$result); + unsigned int temp = $result; + createMatrixOfUnsignedInteger32(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) double { - createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &$result); + double temp = $result; + createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } %typemap(varout,noblock=1) float { - double temp; - temp = (double)$result; + double temp = $result; createMatrixOfDouble(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } +%typemap(varout,noblock=1) long long { + long long temp = $result; + createMatrixOfInteger64(iVarOut, iRowsOut, iColsOut, &temp); + LhsVar(iOutNum) = iVarOut; +} + +%typemap(varout,noblock=1) unsigned long long { + unsigned long long temp = $result; + createMatrixOfUnsignedInteger64(iVarOut, iRowsOut, iColsOut, &temp); + LhsVar(iOutNum) = iVarOut; +} + %typemap(varout,noblock=1) char { - char *temp; - temp = (char*)&($result); + char *temp = (char *)malloc(sizeof($result) + 1); + *temp = $result; + *(temp+1) = '\0'; createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; + free(temp); } %typemap(varout,noblock=1) char * { - createMatrixOfString(iVarOut, iRowsOut, iColsOut, &($result)); + char *temp = $result; + createMatrixOfString(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } @@ -786,9 +843,7 @@ } %typemap(varout,noblock=1) float [ANY] { - double temp; - temp = (double)$result; - createMatrixOfDouble(iVarOut, 1, $1_dim0, (double *)&temp); + createMatrixOfDouble(iVarOut, 1, $1_dim0, (double *)$result); LhsVar(iOutNum) = iVarOut; } @@ -800,6 +855,12 @@ LhsVar(iOutNum) = iVarOut; } +%typemap(varout,noblock=1) enum SWIGTYPE { + int temp = $result; + createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp); + LhsVar(iOutNum) = iVarOut; +} + %typemap(varout,noblock=1) SWIGTYPE * { createPointer(iVarOut, (void *)$result); LhsVar(iOutNum) = iVarOut; @@ -811,8 +872,7 @@ } /* ------------------------------------------------------------ - * Enums mapped as integer values + * size_t mapped as int * ------------------------------------------------------------ */ -%apply int { enum SWIGTYPE }; %apply int { size_t }; Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-07 21:50:21 UTC (rev 11514) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-08 13:25:29 UTC (rev 11515) @@ -26,14 +26,10 @@ File *f_init; String *f_builder_code; - String *f_example_code; - - bool hasfunction_flag; - bool hasconstant_flag; - + public: SCILAB(): - f_builder_code(NewString("")), f_example_code(NewString("")), hasfunction_flag(false), hasconstant_flag(false) { + f_builder_code(NewString("")) { } @@ -100,7 +96,7 @@ Printf(f_runtime, "#include \"stack-c.h\"\n"); Printf(f_runtime, "#include \"sciprint.h\"\n"); Printf(f_runtime, "#include \"Scierror.h\"\n"); - Printf(f_runtime, "#include \"api_variable.h\"\n"); + Printf(f_runtime, "#include \"api_scilab.h\"\n"); Printf(f_runtime, "#include \"localization.h\"\n"); /* Initialize the builder.sce file code */ @@ -113,32 +109,15 @@ Language::top(n); /* create the file to generate the module: "builder.sce" */ - if(hasfunction_flag) { - Printf(f_builder_code, "];\n"); - Printf(f_builder_code, "ilib_build(ilib_name,table,files,libs);\n"); - Printf(f_builder_code, "exit"); - File *f_builder=NewFile(NewStringf("%sbuilder.sce", SWIG_output_directory()), "w", SWIG_output_files()); - Printv(f_builder, f_builder_code, NIL); - Close(f_builder); - Delete(f_builder); - Delete(f_builder_code); - } - else { - Delete(f_builder_code); - } + Printf(f_builder_code, "];\n"); + Printf(f_builder_code, "ilib_build(ilib_name,table,files,libs);\n"); + Printf(f_builder_code, "exit"); + File *f_builder=NewFile(NewStringf("%sbuilder.sce", SWIG_output_directory()), "w", SWIG_output_files()); + Printv(f_builder, f_builder_code, NIL); + Close(f_builder); + Delete(f_builder); + Delete(f_builder_code); - /* create the file for constants: "module.sce" */ - if(hasconstant_flag) { - File *f_example = NewFile(NewStringf("%s%s.sce", SWIG_output_directory(), module), "w", SWIG_output_files()); - Printv(f_example, f_example_code, NIL); - Close(f_example); - Delete(f_example); - Delete(f_example_code); - } - else { - Delete(f_example_code); - } - /* Dump out all the files */ Dump(f_runtime, f_begin); Dump(f_header, f_begin); @@ -162,8 +141,6 @@ virtual int functionWrapper(Node *n) { - hasfunction_flag = true; - /* A new wrapper function object */ Wrapper *f = NewWrapper(); Parm *p; @@ -341,8 +318,6 @@ virtual int variableWrapper(Node *n) { - hasfunction_flag = true; - /* Get the useful information from the node */ String *name = Getattr(n, "name"); String *iname = Getattr(n, "sym:name"); @@ -456,44 +431,46 @@ virtual int constantWrapper(Node *n) { - /* set the flag so to generate the example.sce */ - hasconstant_flag = true; - /* Get the useful information from the node */ + String *name = Getattr(n, "name"); String *iname = Getattr(n, "sym:name"); SwigType *type = Getattr(n, "type"); String *rawval = Getattr(n, "rawval"); String *value = rawval ? rawval : Getattr(n, "value"); - String *tempvalue = NewString(""); + String *tm; - /* set the value format to be the scilab format */ - if (!Strcmp(type, "char")) { - value = Getattr(n, "rawvalue"); - char *temp = (Char(value)); - tempvalue = NewString("ascii"); - Printf(tempvalue, "(%d)", (unsigned int)*temp); - value = Copy(tempvalue); - Delete(tempvalue); - } - else { - if (!Strcmp(type, "p.char")) { - char *temp = (Char(value)); - int len = strlen(temp); - for (int i = 0; i < len; ++i) { - if (temp[i] == '\\') { - temp[i] = '"'; - ++i; - } - } - Printf(tempvalue, "%s",temp); - value = Copy(tempvalue); - } - Delete(tempvalue); - } + if (!addSymbol(iname, n)) + return SWIG_ERROR; - /* write into the code string */ - Printf(f_example_code, "%s = %s\n", iname, value); + /*use the get function to get the constant value */ + Wrapper *getf = NewWrapper(); + String *getname = Swig_name_get(iname); + Setattr(n, "wrap:name", getname); + int addfail = 0; + Printv(getf->def, "int ", getname, " (char *fname,unsigned long fname_len){\n", NIL); + + /* Check the number of input and output */ + Printf(getf->def, "CheckRhs(0, 0);\n"); + Printf(getf->def, "CheckLhs(1, 1);\n"); + /* Insert the order of output parameters*/ + Printf(getf->def, "\nint iOutNum=1;\nint iVarOut=Rhs+1;"); + + if ((tm = Swig_typemap_lookup("varout", n, name, 0))) { + Replaceall(tm, "$result", value); + Replaceall(tm, "iRowsOut", "1"); + Replaceall(tm, "iColsOut", "1"); + addfail = emit_action_code(n, getf->code, tm); + Delete(tm); + } else { + Swig_warning(WARN_TYPEMAP_VAROUT_UNDEF, input_file, line_number, "Unable to read variable of type %s\n", SwigType_str(type, 0)); + } + + /*Dump the wrapper function */ + Append(getf->code, "}\n"); + Wrapper_print(getf, f_wrappers); + Printf(f_builder_code, "\"%s\",\"%s\";", getname, getname); + return SWIG_OK; } @@ -502,9 +479,6 @@ * --------------------------------------------------------------------- */ virtual int enumDeclaration(Node *n) { - - /* set the flag so to generate the example.sce */ - hasconstant_flag = true; return Language::enumDeclaration(n); } @@ -513,68 +487,8 @@ * --------------------------------------------------------------------- */ virtual int enumvalueDeclaration(Node *n) { - - /* get the name of the enumvalue */ - String *iname = Getattr(n, "sym:name"); - - /* get the name of the enum name */ - String *parentName = Getattr(parentNode(n), "sym:name"); - - /* set the name to be the enum.enumvalue format */ - if (parentName) { - /*if the enum has a name*/ - if(!Getattr(parentNode(n), "unnamedinstance")) { - String *temp = Copy(parentName); - Printf(temp, ".%s", iname); - Setattr(n, "sym:name", temp); - Delete(temp); - iname = Getattr(n, "sym:name"); - } - } - - /* set the value attribute to be the integer */ - String *value; - String *enumvalue = Getattr(n, "enumvalue"); - if (enumvalue) { - if (Len(enumvalue) == 1) { - char *temp = (Char(enumvalue)); - /*set the value of char into the format of integer*/ - if (((*temp <= 'z') && (*temp >= 'a')) || ((*temp <= 'Z') && (*temp >= 'A'))) { - String *tempInteger = NewString(""); - Printf(tempInteger, "%i", int(*temp)); - Setattr(n, "value", tempInteger); - Delete(tempInteger); - } - else { - Setattr(n, "value", enumvalue); - } - } - else { - Setattr(n, "value", enumvalue); - } - } - else { - if (n != firstChild(parentNode(n))) { - enumvalue = Getattr(n, "enumvalueex"); - if (parentName) { - if (!Getattr(parentNode(n), "unnamedinstance")) { - String *temp = Copy(parentName); - Printf(temp, ".%s", enumvalue); - enumvalue = Copy(temp); - } - } - Setattr(n, "value", enumvalue); - } - else { - Setattr(n, "value", Getattr(n, "enumvalueex")); - } - } - value = Getattr(n, "value"); - - /* write into the code string */ - Printf(f_example_code, "%s = %s;\n", iname, value); - return SWIG_OK; - } + return Language::enumvalueDeclaration(n); + } }; extern "C" Language *swig_scilab(void) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-08-10 01:40:20
|
Revision: 11524 http://swig.svn.sourceforge.net/swig/?rev=11524&view=rev Author: sploving Date: 2009-08-10 01:40:09 +0000 (Mon, 10 Aug 2009) Log Message: ----------- merge frome trunk Modified Paths: -------------- branches/gsoc2009-sploving/CHANGES.current branches/gsoc2009-sploving/Doc/Manual/Java.html branches/gsoc2009-sploving/Examples/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/allegrocl/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/cffi/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/chicken/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/clisp/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/common.mk branches/gsoc2009-sploving/Examples/test-suite/constant_pointers.i branches/gsoc2009-sploving/Examples/test-suite/constructor_copy.i branches/gsoc2009-sploving/Examples/test-suite/csharp/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_map_runme.cs branches/gsoc2009-sploving/Examples/test-suite/csharp/special_variable_macros_runme.cs branches/gsoc2009-sploving/Examples/test-suite/guile/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/guilescm/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/java/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/java/special_variable_macros_runme.java branches/gsoc2009-sploving/Examples/test-suite/li_std_map.i branches/gsoc2009-sploving/Examples/test-suite/li_std_vector.i branches/gsoc2009-sploving/Examples/test-suite/lua/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/mzscheme/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/ocaml/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/octave/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/octave/wrapmacro_runme.m branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/perl5/wrapmacro_runme.pl branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/php/tests.php branches/gsoc2009-sploving/Examples/test-suite/pike/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/python/special_variable_macros_runme.py branches/gsoc2009-sploving/Examples/test-suite/python/template_typedef_import_runme.py branches/gsoc2009-sploving/Examples/test-suite/python/wrapmacro_runme.py branches/gsoc2009-sploving/Examples/test-suite/r/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/special_variable_macros.i branches/gsoc2009-sploving/Examples/test-suite/tcl/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/typemap_out_optimal.i branches/gsoc2009-sploving/Examples/test-suite/uffi/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/wrapmacro.i branches/gsoc2009-sploving/Lib/csharp/std_map.i branches/gsoc2009-sploving/Lib/csharp/std_vector.i branches/gsoc2009-sploving/Lib/php/phpkw.swg branches/gsoc2009-sploving/Lib/php/phprun.swg branches/gsoc2009-sploving/Lib/swig.swg branches/gsoc2009-sploving/Lib/tcl/std_vector.i branches/gsoc2009-sploving/Makefile.in branches/gsoc2009-sploving/Source/Modules/php.cxx branches/gsoc2009-sploving/Source/Modules/python.cxx branches/gsoc2009-sploving/Source/Modules/tcl8.cxx branches/gsoc2009-sploving/Source/Swig/typemap.c Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/li_std_combinations.i branches/gsoc2009-sploving/Examples/test-suite/php/import_nomodule_runme.php branches/gsoc2009-sploving/Examples/test-suite/php/overload_rename_runme.php Removed Paths: ------------- branches/gsoc2009-sploving/Examples/scilab/constants/makefile branches/gsoc2009-sploving/Examples/scilab/contract/makefile branches/gsoc2009-sploving/Examples/scilab/enum/makefile branches/gsoc2009-sploving/Examples/scilab/pointer/makefile branches/gsoc2009-sploving/Examples/scilab/simple/makefile branches/gsoc2009-sploving/Examples/scilab/variables/makefile Property Changed: ---------------- branches/gsoc2009-sploving/ branches/gsoc2009-sploving/Examples/test-suite/csharp/special_variable_macros_runme.cs branches/gsoc2009-sploving/Examples/test-suite/java/special_variable_macros_runme.java branches/gsoc2009-sploving/Examples/test-suite/python/special_variable_macros_runme.py branches/gsoc2009-sploving/Examples/test-suite/special_variable_macros.i Property changes on: branches/gsoc2009-sploving ___________________________________________________________________ Modified: svn:mergeinfo - /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11488 + /branches/swig-2.0:11085-11086,11088-11089 /trunk:11203-11523 Modified: branches/gsoc2009-sploving/CHANGES.current =================================================================== --- branches/gsoc2009-sploving/CHANGES.current 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/CHANGES.current 2009-08-10 01:40:09 UTC (rev 11524) @@ -1,6 +1,41 @@ Version 1.3.40 (in progress) ============================ +2009-08-08: wsfulton + [Python] More user friendly AttributeError is raised when there are + no constructors generated for the proxy class in the event that the + class is abstract - the error message is now + "No constructor defined - class is abstract" whereas if there are no + public constructors for any other reason and the class is not abstract, + the message remains + "No constructor defined". + [tcl] Similarly for tcl when using -itcl. + +2009-08-04: olly + [PHP] Fix generated code to work with PHP 5.3. + +2009-08-04: vmiklos + [PHP] Various mathematical functions (which would conflict + with the built-in PHP ones) are now automatically handled by + adding a 'c_' prefix. + +2009-08-03: wsfulton + [C#] The std::vector<T> implementation is improved and now uses $typemap such + that the proxy class for T no longer has to be specified in some macros + for correct C# compilation; the following macros are deprecated, where + CSTYPE was the C# type for the C++ class CTYPE: + + SWIG_STD_VECTOR_SPECIALIZE_MINIMUM(CSTYPE, CTYPE) + usage should be removed altogether + + SWIG_STD_VECTOR_SPECIALIZE(CSTYPE, CTYPE) + should be replaced with: + SWIG_STD_VECTOR_ENHANCED(CTYPE) + + Some more details in csharp/std_vector.i + + *** POTENTIAL INCOMPATIBILITY *** + 2009-07-31: olly [Python] Fix indentation so that we give a useful error if the module can't be loaded. Patch from Gaetan Lehmann in SF#2829853. Modified: branches/gsoc2009-sploving/Doc/Manual/Java.html =================================================================== --- branches/gsoc2009-sploving/Doc/Manual/Java.html 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Doc/Manual/Java.html 2009-08-10 01:40:09 UTC (rev 11524) @@ -447,6 +447,19 @@ <p> This error usually indicates that you forgot to include some object files or libraries in the linking of the native library file. Make sure you compile both the SWIG wrapper file and the code you are wrapping into the native library file. +If you forget to compile and link in the SWIG wrapper file into your native library file, you will get a message similar to the following: +</p> + +<div class="code"><pre> +$ java runme +Exception in thread "main" java.lang.UnsatisfiedLinkError: exampleJNI.gcd(II)I + at exampleJNI.gcd(Native Method) + at example.gcd(example.java:12) + at runme.main(runme.java:18) +</pre></div> + +<p> +where <tt>gcd</tt> is the missing JNI function that SWIG generated into the wrapper file. Also make sure you pass all of the required libraries to the linker. The <tt>java -verbose:jni</tt> commandline switch is also a great way to get more information on unresolved symbols. One last piece of advice is to beware of the common faux pas of having more than one native library version in your path. Modified: branches/gsoc2009-sploving/Examples/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -318,7 +318,7 @@ rm -f *_wrap* *~ .~* mypython@EXEEXT@ *.pyc rm -f core @EXTRA_CLEAN@ rm -f *.@OBJEXT@ *@SO@ *@PYTHON_SO@ - if [ -f runme.py ]; then (rm -f runme3.py runme3.py.bak;) fi; + if [ -f runme.py ]; then rm -f runme3.py runme3.py.bak; fi ################################################################## Deleted: branches/gsoc2009-sploving/Examples/scilab/constants/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/constants/makefile 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/scilab/constants/makefile 2009-08-10 01:40:09 UTC (rev 11524) @@ -1,16 +0,0 @@ -TOP = ../.. -SWIG = $(TOP)/../preinst-swig -SRCS = example.i -TARGET = example -INTERFACE = example.i - -all:: - $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ - TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab - scilab -nwni < runme.sci - -clean:: - $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c *_wrap.c - -check: all Deleted: branches/gsoc2009-sploving/Examples/scilab/contract/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/contract/makefile 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/scilab/contract/makefile 2009-08-10 01:40:09 UTC (rev 11524) @@ -1,16 +0,0 @@ -TOP = ../.. -SWIG = $(TOP)/../preinst-swig -SRCS = example.c -TARGET = example -INTERFACE = example.i - -all:: - $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ - TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab - scilab -nwni < runme.sci - -clean:: - $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c *_wrap.c - -check: all Deleted: branches/gsoc2009-sploving/Examples/scilab/enum/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/enum/makefile 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/scilab/enum/makefile 2009-08-10 01:40:09 UTC (rev 11524) @@ -1,16 +0,0 @@ -TOP = ../.. -SWIG = $(TOP)/../preinst-swig -SRCS = example.c -TARGET = example -INTERFACE = example.i - -all:: - $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ - TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab - scilab -nwni < runme.sci - -clean:: - $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c *_wrap.c - -check: all Deleted: branches/gsoc2009-sploving/Examples/scilab/pointer/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/pointer/makefile 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/scilab/pointer/makefile 2009-08-10 01:40:09 UTC (rev 11524) @@ -1,16 +0,0 @@ -TOP = ../.. -SWIG = $(TOP)/../preinst-swig -SRCS = example.c -TARGET = example -INTERFACE = example.i - -all:: - $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ - TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab - scilab -nwni < runme.sci - -clean:: - $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c *_wrap.c - -check: all Deleted: branches/gsoc2009-sploving/Examples/scilab/simple/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/simple/makefile 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/scilab/simple/makefile 2009-08-10 01:40:09 UTC (rev 11524) @@ -1,16 +0,0 @@ -TOP = ../.. -SWIG = $(TOP)/../preinst-swig -SRCS = example.c -TARGET = example -INTERFACE = example.i - -all:: - $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ - TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab - scilab -nwni < runme.sci - -clean:: - $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c *_wrap.c - -check: all Deleted: branches/gsoc2009-sploving/Examples/scilab/variables/makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/variables/makefile 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/scilab/variables/makefile 2009-08-10 01:40:09 UTC (rev 11524) @@ -1,16 +0,0 @@ -TOP = ../.. -SWIG = $(TOP)/../preinst-swig -SRCS = example.c -TARGET = example -INTERFACE = example.i - -all:: - $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ - TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab - scilab -nwni < runme.sci - -clean:: - $(MAKE) -f $(TOP)/Makefile scilab_clean - rm -f *.sce *.so lib*lib.c *_wrap.c - -check: all Modified: branches/gsoc2009-sploving/Examples/test-suite/allegrocl/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/allegrocl/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/allegrocl/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -114,9 +114,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.lisp appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(ALLEGROCLBIN) -batch -s $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(ALLEGROCLBIN) -batch -s $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi %.clean: @rm -f $*.cl Modified: branches/gsoc2009-sploving/Examples/test-suite/cffi/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/cffi/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/cffi/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -38,9 +38,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.lisp appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CFFIBIN) -batch -s $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CFFIBIN) -batch -s $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean: (does nothing, we dont generate extra cffi code) %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/chicken/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/chicken/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/chicken/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -43,25 +43,25 @@ $(setup) +$(swig_and_compile_cpp) $(run_testcase) - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then ( \ - $(MAKE) $*.cppproxy; ) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then \ + $(MAKE) $*.cppproxy; \ + fi %.ctest: $(setup) +$(swig_and_compile_c) $(run_testcase) - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then ( \ - $(MAKE) $*.cproxy; ) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then \ + $(MAKE) $*.cproxy; \ + fi %.multicpptest: $(setup) +$(swig_and_compile_multi_cpp) $(run_testcase) - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then ( \ - $(MAKE) $*.multiproxy; ) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(PROXYSUFFIX) ]; then \ + $(MAKE) $*.multiproxy; \ + fi %.externaltest: $(setup) @@ -86,9 +86,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.scm appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CHICKEN_CSI) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CHICKEN_CSI) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/clisp/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/clisp/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/clisp/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -38,9 +38,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.lisp appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CLISPBIN) -batch -s $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(CLISPBIN) -batch -s $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean: (does nothing, we dont generate extra clisp code) %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/common.mk =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/common.mk 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/common.mk 2009-08-10 01:40:09 UTC (rev 11524) @@ -405,6 +405,7 @@ CPP_STD_TEST_CASES += \ director_string \ ignore_template_constructor \ + li_std_combinations \ li_std_deque \ li_std_except \ li_std_pair \ Modified: branches/gsoc2009-sploving/Examples/test-suite/constant_pointers.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/constant_pointers.i 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/constant_pointers.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -121,7 +121,8 @@ %{ static int wxEVT_COMMAND_BUTTON_CLICKEDv; -static int **wxEVT_COMMAND_BUTTON_CLICKEDp; +static int *wxEVT_COMMAND_BUTTON_CLICKEDp; +static int **wxEVT_COMMAND_BUTTON_CLICKEDpp = &wxEVT_COMMAND_BUTTON_CLICKEDp; #if defined(SWIGR) #undef lang1 /* conflicts with symbol in R internals */ #endif @@ -137,7 +138,7 @@ #define EWXWEXPORT_VAR const int* wxEVENT_COMMAND_BUTTON_CLICKEDr = (int*) &wxEVT_COMMAND_BUTTON_CLICKEDv; - const int* wxEVENT_COMMAND_BUTTON_CLICKEDp = (int*) *wxEVT_COMMAND_BUTTON_CLICKEDp; + const int* wxEVENT_COMMAND_BUTTON_CLICKEDp = (int*) *wxEVT_COMMAND_BUTTON_CLICKEDpp; char **languages1 = &langs[0]; char **languages2 = (char **)&langs[0]; } Modified: branches/gsoc2009-sploving/Examples/test-suite/constructor_copy.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/constructor_copy.i 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/constructor_copy.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -73,10 +73,6 @@ %include "std_vector.i" -#if defined(SWIGCSHARP) -SWIG_STD_VECTOR_SPECIALIZE_MINIMUM(Flow, Space::Flow) -#endif - #if defined(SWIGJAVA) || defined(SWIGCSHARP) || defined(SWIGPYTHON) || defined(SWIGR) || defined(SWIGOCTAVE) || defined(SWIGRUBY) #define SWIG_GOOD_VECTOR %ignore std::vector<Space::Flow>::vector(size_type); Modified: branches/gsoc2009-sploving/Examples/test-suite/csharp/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -59,31 +59,31 @@ echo "$(ACTION)ing testcase $* under $(LANGUAGE)" ; \ fi; \ if [ ! -d $* ]; then \ - mkdir $*; \ - fi; + mkdir $*; \ + fi # Compiles C# files then runs the testcase. A testcase is only run if # a file is found which has _runme.cs appended after the testcase name. # Note C# uses LD_LIBRARY_PATH under Unix, PATH under Cygwin/Windows and SHLIB_PATH on HPUX. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ $(MAKE) -f $*/$(top_builddir)/$(EXAMPLES)/Makefile \ CSHARPFLAGS='-nologo $(CSHARPFLAGSSPECIAL) -out:$*_runme.exe' \ CSHARPSRCS='`$(CSHARPCYGPATH_W) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX)` \ $*$(CSHARPPATHSEPARATOR)*.cs' csharp_compile && \ - env LD_LIBRARY_PATH="$*:$$LD_LIBRARY_PATH" PATH="$*:$$PATH" SHLIB_PATH="$*:$$SHLIB_PATH" $(RUNTOOL) $(INTERPRETER) $*_runme.exe; ) \ - else ( \ + env LD_LIBRARY_PATH="$*:$$LD_LIBRARY_PATH" PATH="$*:$$PATH" SHLIB_PATH="$*:$$SHLIB_PATH" $(RUNTOOL) $(INTERPRETER) $*_runme.exe; \ + else \ cd $* && \ $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile \ CSHARPFLAGS='-nologo $(CSHARPFLAGSSPECIAL) -t:module -out:$*.netmodule' \ - CSHARPSRCS='*.cs' csharp_compile; ); \ - fi; + CSHARPSRCS='*.cs' csharp_compile && cd .. ; \ + fi # Clean: remove testcase directories %.clean: @if [ -d $* ]; then \ - rm -rf $*; \ - fi; + rm -rf $*; \ + fi clean: @rm -f *.exe *.exe.mdb Modified: branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_map_runme.cs =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_map_runme.cs 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/li_std_map_runme.cs 2009-08-10 01:40:09 UTC (rev 11524) @@ -169,7 +169,7 @@ if (keyStringified != " 1 2 3 4 5") throw new Exception("Wrapped method stringifyKeys test failed. Got " + keyStringified); - // Test a map with a new specialized type (Struct) + // Test a map with a new complex type (Struct) { IntStructMap ismap = new IntStructMap(); for (int i = 0; i < 10; i++) @@ -178,12 +178,12 @@ } if (ismap.Count != 10) - throw new Exception("Count test on specialized map failed"); + throw new Exception("Count test on complex type map failed"); foreach (KeyValuePair<int, Struct> p in ismap) { if ((p.Key * 10.1) != p.Value.num) - throw new Exception("Iteration test on specialized map failed for index " + p.Key); + throw new Exception("Iteration test on complex type map failed for index " + p.Key); } } @@ -196,12 +196,12 @@ } if (ispmap.Count != 10) - throw new Exception("Count test on specialized pointer map failed"); + throw new Exception("Count test on complex type pointer map failed"); foreach (KeyValuePair<int, Struct> p in ispmap) { if ((p.Key * 10.1) != p.Value.num) - throw new Exception("Iteration test on specialized pointer map failed for index " + p.Key); + throw new Exception("Iteration test on complex type pointer map failed for index " + p.Key); } } { @@ -212,29 +212,29 @@ } if (iscpmap.Count != 10) - throw new Exception("Count test on specialized const pointer map failed"); + throw new Exception("Count test on complex type const pointer map failed"); foreach (KeyValuePair<int, Struct> p in iscpmap) { if ((p.Key * 10.1) != p.Value.num) - throw new Exception("Iteration test on specialized const pointer map failed for index " + p.Key); + throw new Exception("Iteration test on complex type const pointer map failed for index " + p.Key); } } - // Test non-specialized map + // Test complex type as key (Struct) { StructIntMap limap = new StructIntMap(); Struct s7 = new Struct(7); Struct s8 = new Struct(8); - limap.setitem(s7 , 8); - if (limap.getitem(s7) != 8) - throw new Exception("Assignment test on non-specialized map failed"); + limap[s7] = 8; + if (limap[s7] != 8) + throw new Exception("Assignment test on complex key map failed"); if (!limap.ContainsKey(s7)) - throw new Exception("Key test (1) on non-specialized map failed"); + throw new Exception("Key test (1) on complex key map failed"); if (limap.ContainsKey(s8)) - throw new Exception("Key test (2) on non-specialized map failed"); + throw new Exception("Key test (2) on complex key map failed"); } // All done Modified: branches/gsoc2009-sploving/Examples/test-suite/csharp/special_variable_macros_runme.cs =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/csharp/special_variable_macros_runme.cs 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/csharp/special_variable_macros_runme.cs 2009-08-10 01:40:09 UTC (rev 11524) @@ -14,6 +14,8 @@ throw new Exception("test failed"); if (special_variable_macros.testJim(name) != "multiname num") throw new Exception("test failed"); + if (special_variable_macros.testJohn(new PairIntBool(10, false)) != 123) + throw new Exception("test failed"); NewName newName = NewName.factory("factoryname"); name = newName.getStoredName(); } Property changes on: branches/gsoc2009-sploving/Examples/test-suite/csharp/special_variable_macros_runme.cs ___________________________________________________________________ Modified: svn:mergeinfo - + /trunk/SWIG/Examples/test-suite/csharp/special_variable_macros_runme.cs:3-9589 Modified: branches/gsoc2009-sploving/Examples/test-suite/guile/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/guile/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/guile/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -44,9 +44,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.scm appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(GUILE) -l $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(GUILE) -l $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/guilescm/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/guilescm/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/guilescm/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -19,16 +19,16 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.scm appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(GUILE) -l $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(GUILE) -l $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi setup = \ if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ echo "$(ACTION)ing testcase $* (with run test) under $(LANGUAGE) (with SCM API)" ; \ else \ echo "$(ACTION)ing testcase $* under $(LANGUAGE) (with SCM API)" ; \ - fi; + fi %.externaltest: $(local_setup) @@ -41,9 +41,9 @@ echo "$(ACTION)ing testcase $* (with run test) under $(LANGUAGE) (with SCM API)" ; \ else \ echo "$(ACTION)ing testcase $* under $(LANGUAGE) (with SCM API)" ; \ - fi; + fi local_run_testcase = \ - if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(GUILE) -l $(srcdir)/$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(GUILE) -l $(srcdir)/$*$(SCRIPTSUFFIX); \ + fi Modified: branches/gsoc2009-sploving/Examples/test-suite/java/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/java/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/java/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -67,24 +67,24 @@ echo "$(ACTION)ing testcase $* under $(LANGUAGE)" ; \ fi; \ if [ ! -d $* ]; then \ - mkdir $*; \ - fi; + mkdir $*; \ + fi # Compiles java files then runs the testcase. A testcase is only run if # a file is found which has _runme.java appended after the testcase name. # Note Java uses LD_LIBRARY_PATH under Unix, PATH under Cygwin/Windows, SHLIB_PATH on HPUX and DYLD_LIBRARY_PATH on Mac OS X. run_testcase = \ - (cd $* && $(COMPILETOOL) $(JAVAC) -classpath . *.java) && \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - $(COMPILETOOL) $(JAVAC) -classpath . -d . $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) && \ - env LD_LIBRARY_PATH="$*:$$LD_LIBRARY_PATH" PATH="$*:$$PATH" SHLIB_PATH="$*:$$SHLIB_PATH" DYLD_LIBRARY_PATH="$*:$$DYLD_LIBRARY_PATH" $(RUNTOOL) $(JAVA) -classpath . $*_runme;) \ - fi; + cd $* && $(COMPILETOOL) $(JAVAC) -classpath . *.java && cd .. && \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + $(COMPILETOOL) $(JAVAC) -classpath . -d . $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) && \ + env LD_LIBRARY_PATH="$*:$$LD_LIBRARY_PATH" PATH="$*:$$PATH" SHLIB_PATH="$*:$$SHLIB_PATH" DYLD_LIBRARY_PATH="$*:$$DYLD_LIBRARY_PATH" $(RUNTOOL) $(JAVA) -classpath . $*_runme; \ + fi # Clean: remove testcase directories %.clean: @if [ -d $* ]; then \ - rm -rf $*; \ - fi; + rm -rf $*; \ + fi clean: @rm -f *.class hs_err*.log Modified: branches/gsoc2009-sploving/Examples/test-suite/java/special_variable_macros_runme.java =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/java/special_variable_macros_runme.java 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/java/special_variable_macros_runme.java 2009-08-10 01:40:09 UTC (rev 11524) @@ -24,6 +24,8 @@ throw new RuntimeException("test failed"); if (!special_variable_macros.testJim(name).equals("multiname num")) throw new RuntimeException("test failed"); + if (special_variable_macros.testJohn(new PairIntBool(10, false)) != 123) + throw new RuntimeException("test failed"); NewName newName = NewName.factory("factoryname"); name = newName.getStoredName(); } Property changes on: branches/gsoc2009-sploving/Examples/test-suite/java/special_variable_macros_runme.java ___________________________________________________________________ Modified: svn:mergeinfo - + /trunk/SWIG/Examples/test-suite/java/special_variable_macros_runme.java:3-9589 Copied: branches/gsoc2009-sploving/Examples/test-suite/li_std_combinations.i (from rev 11523, trunk/Examples/test-suite/li_std_combinations.i) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/li_std_combinations.i (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/li_std_combinations.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -0,0 +1,15 @@ +%module li_std_combinations + +%include <std_vector.i> +%include <std_string.i> +%include <std_pair.i> + +%template(VectorInt) std::vector<int>; +%template(VectorString) std::vector<std::string>; +%template(PairIntString) std::pair<int, std::string>; + +%template(VectorPairIntString) std::vector< std::pair<int, std::string> >; +%template(PairIntVectorString) std::pair< int, std::vector<std::string> >; + +%template(VectorVectorString) std::vector< std::vector<std::string> >; +%template(PairIntPairIntString) std::pair< int, std::pair<int, std::string> >; Modified: branches/gsoc2009-sploving/Examples/test-suite/li_std_map.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/li_std_map.i 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/li_std_map.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -46,18 +46,6 @@ %} -#if defined(SWIGCSHARP) - -// Specialize some more non-default map types -SWIG_STD_MAP_SPECIALIZED(int, int *, int, SWIGTYPE_p_int) -SWIG_STD_MAP_SPECIALIZED(int, const int *, int, SWIGTYPE_p_int) -SWIG_STD_MAP_SPECIALIZED_SIMPLE(int, Struct) -SWIG_STD_MAP_SPECIALIZED(int, Struct *, int, Struct) -SWIG_STD_MAP_SPECIALIZED(int, const Struct *, int, Struct) -SWIG_STD_MAP_SPECIALIZED(Struct *, int, Struct, int) - -#endif - //#if !defined(SWIGR) // Test out some maps with pointer types Modified: branches/gsoc2009-sploving/Examples/test-suite/li_std_vector.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/li_std_vector.i 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/li_std_vector.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -75,12 +75,7 @@ %} #if defined(SWIGCSHARP) -SWIG_STD_VECTOR_SPECIALIZE(Struct, Struct *) -SWIG_STD_VECTOR_SPECIALIZE(Struct, const Struct *) -SWIG_STD_VECTOR_SPECIALIZE(SWIGTYPE_p_int, int *) -SWIG_STD_VECTOR_SPECIALIZE(SWIGTYPE_p_int, const int *) - -// Also test non-specialized versions +// Also test const and non-const pointers, but not strictly necessary since std::vector was enhanced in swig-1.3.40 %template(StructurePtrVector) std::vector<Structure *>; %template(StructureConstPtrVector) std::vector<const Structure *>; #endif @@ -93,10 +88,6 @@ %template(StructPtrVector) std::vector<Struct *>; %template(StructConstPtrVector) std::vector<const Struct *>; -#if defined(SWIGCSHARP) -SWIG_STD_VECTOR_SPECIALIZE(MyClass, MyClass *) -#endif - #if !defined(SWIGTCL) %inline { struct MyClass {}; Modified: branches/gsoc2009-sploving/Examples/test-suite/lua/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/lua/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/lua/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -46,9 +46,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.lua appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(LUA) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(LUA) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean: (does nothing, we dont generate extra lua code) %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/mzscheme/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/mzscheme/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/mzscheme/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -36,9 +36,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.scm appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(MZSCHEME) -r $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(MZSCHEME) -r $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/ocaml/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/ocaml/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/ocaml/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -14,13 +14,13 @@ run_testcase = \ if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) -a \ - -f $(top_srcdir)/Examples/test-suite/$*.list ] ; then ( \ + -f $(top_srcdir)/Examples/test-suite/$*.list ] ; then \ $(COMPILETOOL) $(OCAMLC) -c $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ - $(COMPILETOOL) $(OCAMLC) swig.cmo -custom -g -cc '$(CXX)' -o runme `cat $(top_srcdir)/Examples/test-suite/$(*).list | sed -e 's/\(.*\)/\1_wrap.o \1.cmo/g'`&& $(RUNTOOL) ./runme) ; \ - elif [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ + $(COMPILETOOL) $(OCAMLC) swig.cmo -custom -g -cc '$(CXX)' -o runme `cat $(top_srcdir)/Examples/test-suite/$(*).list | sed -e 's/\(.*\)/\1_wrap.o \1.cmo/g'`&& $(RUNTOOL) ./runme; \ + elif [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ $(COMPILETOOL) $(OCAMLC) -c $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ $(COMPILETOOL) $(OCAMLC) swig.cmo -custom -g -cc '$(CXX)' -o runme $(srcdir)/$(*).cmo $(srcdir)/$(*)_runme.cmo $(srcdir)/$(*)_wrap.o && \ - $(RUNTOOL) ./runme) ; \ + $(RUNTOOL) ./runme; \ fi ; check_quant: Modified: branches/gsoc2009-sploving/Examples/test-suite/octave/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/octave/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/octave/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -56,9 +56,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.m appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH OCTAVEPATH=$(srcdir):OCTAVEPATH $(RUNTOOL) $(OCTAVE) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH OCTAVEPATH=$(srcdir):OCTAVEPATH $(RUNTOOL) $(OCTAVE) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean: remove the generated .m file %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/octave/wrapmacro_runme.m =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/octave/wrapmacro_runme.m 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/octave/wrapmacro_runme.m 2009-08-10 01:40:09 UTC (rev 11524) @@ -2,7 +2,7 @@ a = 2; b = -1; -wrapmacro.max(a,b); -wrapmacro.max(a/7.0, -b*256); +wrapmacro.maximum(a,b); +wrapmacro.maximum(a/7.0, -b*256); wrapmacro.GUINT16_SWAP_LE_BE_CONSTANT(1); Modified: branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/perl5/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -49,11 +49,10 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.pl appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(PERL) $(TEST_RUNNER) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \ - fi; \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(PERL) $(TEST_RUNNER) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi - # Clean: remove the generated .pm file %.clean: @rm -f $*.pm; Modified: branches/gsoc2009-sploving/Examples/test-suite/perl5/wrapmacro_runme.pl =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/perl5/wrapmacro_runme.pl 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/perl5/wrapmacro_runme.pl 2009-08-10 01:40:09 UTC (rev 11524) @@ -9,6 +9,6 @@ my $a = 2; my $b = -1; -is(wrapmacro::max($a,$b), 2); -is(wrapmacro::max($a/7.0, -$b*256), 256); +is(wrapmacro::maximum($a,$b), 2); +is(wrapmacro::maximum($a/7.0, -$b*256), 256); is(wrapmacro::GUINT16_SWAP_LE_BE_CONSTANT(1), 256); Modified: branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/php/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -44,12 +44,14 @@ +$(swig_and_compile_multi_cpp) +$(run_testcase) -# Runs the testcase. A testcase is only run if -# a file is found which has _runme.php appended after the testcase name. +# Runs the testcase. Tries to run testcase_runme.php, and if that's not +# found, runs testcase.php, except for multicpptests. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile PHPSCRIPT=$(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) RUNTOOL=$(RUNTOOL) php_run;) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile PHPSCRIPT=$(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) RUNTOOL=$(RUNTOOL) php_run; \ + elif [ -f $(srcdir)/$(SCRIPTPREFIX)$*.php -a ! -f $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list ]; then \ + $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile PHPSCRIPT=$(srcdir)/$(SCRIPTPREFIX)$*.php RUNTOOL=$(RUNTOOL) php_run; \ + fi # Clean: remove the generated .php file %.clean: Copied: branches/gsoc2009-sploving/Examples/test-suite/php/import_nomodule_runme.php (from rev 11523, trunk/Examples/test-suite/php/import_nomodule_runme.php) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/php/import_nomodule_runme.php (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/php/import_nomodule_runme.php 2009-08-10 01:40:09 UTC (rev 11524) @@ -0,0 +1,20 @@ +<?php +require "tests.php"; +require "import_nomodule.php"; + +// No new functions +check::functions(array(create_foo,delete_foo,test1)); +// No new classes +check::classes(array(import_nomodule,Bar)); +// now new vars +check::globals(array()); + +$f = import_nomodule::create_Foo(); +import_nomodule::test1($f,42); +import_nomodule::delete_Foo($f); + +$b = new Bar(); +import_nomodule::test1($b,37); + +check::done(); +?> Copied: branches/gsoc2009-sploving/Examples/test-suite/php/overload_rename_runme.php (from rev 11523, trunk/Examples/test-suite/php/overload_rename_runme.php) =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/php/overload_rename_runme.php (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/php/overload_rename_runme.php 2009-08-10 01:40:09 UTC (rev 11524) @@ -0,0 +1,19 @@ +<?php + +require "tests.php"; +require "overload_rename.php"; + +// No new functions +check::functions(array()); +// No new classes +check::classes(array(Foo)); +// now new vars +check::globals(array()); + +$f = new Foo(1.0); +$f = new Foo(1.0,1.0); +$f = Foo::Foo_int(1.0,1); +$f = Foo::Foo_int(1.0,1,1.0); + +check::done(); +?> Modified: branches/gsoc2009-sploving/Examples/test-suite/php/tests.php =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/php/tests.php 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/php/tests.php 2009-08-10 01:40:09 UTC (rev 11524) @@ -70,6 +70,8 @@ } function classname($string,$object) { + if (!is_object($object)) + return check::fail("The second argument is a " . gettype($object) . ", not an object."); if (strtolower($string)!=strtolower($classname=get_class($object))) return check::fail("Object: \$object is of class %s not class %s",$classname,$string); return TRUE; } Modified: branches/gsoc2009-sploving/Examples/test-suite/pike/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/pike/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/pike/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -36,9 +36,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.pike appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(PIKE) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(PIKE) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean: remove the generated .pike file %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/python/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -125,17 +125,16 @@ ifeq (,$(PY3)) run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - $(run_python);)\ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + $(run_python);\ + fi else run_testcase = \ - if [ -f $(py2_runme) ]; then ( \ - $(MAKE) -f $(srcdir)/Makefile $(py3_runme) && \ - $(run_python);) \ - elif [ -f $(py3_runme) ]; then ( \ - $(run_python);) \ - fi; + if [ -f $(py2_runme) ]; then \ + $(MAKE) -f $(srcdir)/Makefile $(py3_runme) && $(run_python); \ + elif [ -f $(py3_runme) ]; then \ + $(run_python); \ + fi endif # Clean: remove the generated .py file @@ -143,7 +142,7 @@ @rm -f hugemod.h hugemod_a.i hugemod_b.i hugemod_a.py hugemod_b.py hugemod_runme.py @rm -f $*.py; @#We only remove the _runme3.py if it is generated by 2to3 from a _runme.py. - @if [ -f $(py2_runme) ]; then (rm -f $(py3_runme) $(py3_runme).bak;) fi; + @if [ -f $(py2_runme) ]; then rm -f $(py3_runme) $(py3_runme).bak; fi clean: $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile python_clean Modified: branches/gsoc2009-sploving/Examples/test-suite/python/special_variable_macros_runme.py =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/python/special_variable_macros_runme.py 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/python/special_variable_macros_runme.py 2009-08-10 01:40:09 UTC (rev 11524) @@ -11,4 +11,6 @@ raise "test failed" if special_variable_macros.testJim(name) != "multiname num": raise "test failed" +if special_variable_macros.testJohn(special_variable_macros.PairIntBool(10, False)) != 123: + raise "test failed" Property changes on: branches/gsoc2009-sploving/Examples/test-suite/python/special_variable_macros_runme.py ___________________________________________________________________ Modified: svn:mergeinfo - + /trunk/SWIG/Examples/test-suite/python/special_variable_macros_runme.py:3-9589 Modified: branches/gsoc2009-sploving/Examples/test-suite/python/template_typedef_import_runme.py =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/python/template_typedef_import_runme.py 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/python/template_typedef_import_runme.py 2009-08-10 01:40:09 UTC (rev 11524) @@ -1,4 +1,3 @@ -import string from template_typedef_cplx2 import * from template_typedef_import import * Modified: branches/gsoc2009-sploving/Examples/test-suite/python/wrapmacro_runme.py =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/python/wrapmacro_runme.py 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/python/wrapmacro_runme.py 2009-08-10 01:40:09 UTC (rev 11524) @@ -2,6 +2,6 @@ a = 2 b = -1 -wrapmacro.max(a,b) -wrapmacro.max(a/7.0, -b*256) +wrapmacro.maximum(a,b) +wrapmacro.maximum(a/7.0, -b*256) wrapmacro.GUINT16_SWAP_LE_BE_CONSTANT(1) Modified: branches/gsoc2009-sploving/Examples/test-suite/r/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/r/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/r/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -42,20 +42,19 @@ # Run the runme if it exists. If not just load the R wrapper to # check for syntactic correctness run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" \ - $(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ;) \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" $(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ else \ - ($(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$*$(WRAPSUFFIX);) \ - fi; + $(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$*$(WRAPSUFFIX); \ + fi run_multitestcase = \ for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX) ]; then ( \ + if [ -f $(srcdir)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX) ]; then \ env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH PATH=.:"$$PATH" \ - $(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX) ;) \ + $(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$${f}$(SCRIPTSUFFIX); \ else \ - ($(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$${f}$(WRAPSUFFIX);) \ + $(RUNTOOL) $(RUNR) $(srcdir)/$(SCRIPTPREFIX)$${f}$(WRAPSUFFIX); \ fi; \ done # Clean @@ -64,10 +63,10 @@ %.clean: @rm -f $*.R $*_wrap.so $*_wrap.cpp $*_wrap.c $*_wrap.o $*_runme.Rout $*.Rout - @if [ -f $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list ]; then ( \ + @if [ -f $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list ]; then \ for f in `cat $(top_srcdir)/$(EXAMPLES)/$(TEST_SUITE)/$*.list` ; do \ rm -f $${f}.R $${f}.Rout ; \ - done ) \ + done \ fi Modified: branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/ruby/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -60,9 +60,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.rb appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(RUBY) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(RUBY) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/special_variable_macros.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/special_variable_macros.i 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/special_variable_macros.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -111,6 +111,40 @@ %} ////////////////////////////////////////////////////////////////////////////////////// +// Template types with more than one template parameter + +// check $1 and $input get expanded properly when used from $typemap() +%typemap(in) Space::Pair<int, bool> PAIR_INT_BOOL ($1_type temp) +%{ + /*%typemap(in) Name *GENERIC start */ + temp = Space::Pair<int, bool>(123, true); + (void)$input; + $1 = ($1_ltype)temp; + /*%typemap(in) Name *GENERIC end */ +%} + +%typemap(in) Space::Pair<int, bool> john { +// %typemap(in) Name *john start +$typemap(in, Space::Pair<int, bool> PAIR_INT_BOOL) +// %typemap(in) Name *john end +} + +%inline %{ +namespace Space { + template <typename T1, typename T2> struct Pair { + Pair(T1 f, T2 s) : first(f), second(s) {} + Pair() {} + T1 first; + T2 second; + }; + int testJohn(Space::Pair<int, bool> john) { + return john.first; + } +} +%} +%template(PairIntBool) Space::Pair<int, bool>; + +////////////////////////////////////////////////////////////////////////////////////// // A real use case for $typemap #if defined(SWIGCSHARP) Property changes on: branches/gsoc2009-sploving/Examples/test-suite/special_variable_macros.i ___________________________________________________________________ Modified: svn:mergeinfo - + /trunk/SWIG/Examples/test-suite/special_variable_macros.i:3-9589 Modified: branches/gsoc2009-sploving/Examples/test-suite/tcl/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/tcl/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/tcl/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -45,9 +45,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.tcl appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(TCLSH) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(TCLSH) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/typemap_out_optimal.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/typemap_out_optimal.i 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/typemap_out_optimal.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -23,10 +23,10 @@ using namespace std; struct XX { - XX() { cout << "XX()" << endl; } + XX() { if (debug) cout << "XX()" << endl; } XX(int i) { if (debug) cout << "XX(" << i << ")" << endl; } - XX(const XX &other) { cout << "XX(const XX &)" << endl; } - XX& operator =(const XX &other) { cout << "operator=(const XX &)" << endl; return *this; } + XX(const XX &other) { if (debug) cout << "XX(const XX &)" << endl; } + XX& operator =(const XX &other) { if (debug) cout << "operator=(const XX &)" << endl; return *this; } ~XX() { if (debug) cout << "~XX()" << endl; } static XX create() { return XX(123); Modified: branches/gsoc2009-sploving/Examples/test-suite/uffi/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/uffi/Makefile.in 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/uffi/Makefile.in 2009-08-10 01:40:09 UTC (rev 11524) @@ -38,9 +38,9 @@ # Runs the testcase. A testcase is only run if # a file is found which has _runme.lisp appended after the testcase name. run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(UFFIBIN) -batch -s $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX);) \ - fi; + if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(UFFIBIN) -batch -s $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \ + fi # Clean: (does nothing, we dont generate extra uffi code) %.clean: Modified: branches/gsoc2009-sploving/Examples/test-suite/wrapmacro.i =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/wrapmacro.i 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Examples/test-suite/wrapmacro.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -21,7 +21,8 @@ (guint16) ((guint16) (val) >> 8) | \ (guint16) ((guint16) (val) << 8))) -#define max(a,b) ((a) > (b) ? (a) : (b)) +/* Don't use max(), it's a builtin function for PHP. */ +#define maximum(a,b) ((a) > (b) ? (a) : (b)) %} @@ -41,8 +42,8 @@ /* Here, wrapping the macros */ %wrapmacro(guint16, GUINT16_SWAP_LE_BE_CONSTANT, guint16 val, val); -%wrapmacro(size_t, max, PLIST(size_t a, const size_t& b), PLIST(a, b)); -%wrapmacro(double, max, PLIST(double a, double b), PLIST(a, b)); +%wrapmacro(size_t, maximum, PLIST(size_t a, const size_t& b), PLIST(a, b)); +%wrapmacro(double, maximum, PLIST(double a, double b), PLIST(a, b)); /* Maybe in the future, a swig directive will make this easier: Modified: branches/gsoc2009-sploving/Lib/csharp/std_map.i =================================================================== --- branches/gsoc2009-sploving/Lib/csharp/std_map.i 2009-08-09 22:52:08 UTC (rev 11523) +++ branches/gsoc2009-sploving/Lib/csharp/std_map.i 2009-08-10 01:40:09 UTC (rev 11524) @@ -4,26 +4,15 @@ * * std_map.i * - * SWIG typemaps for std::map + * SWIG typemaps for std::map< K, T > * * The C# wrapper is made to look and feel like a C# System.Collections.Generic.IDictionary<>. * * Using this wrapper is fairly simple. For example, to create a map from integers to doubles use: * * %include <std_map.i> - * %template(Map_Int_Double) std::map<int, double> + * %template(MapIntDouble) std::map<int, double> * - * Very often the C# generated code will not compile as the C++ template type is not the same as the C# - * proxy type, so use the SWIG_STD_MAP_SPECIALIZED or SWIG_STD_MAP_SPECIALIZED_SIMPLE macros. For example: - * - * SWIG_STD_MAP_SPECIALIZED(MyCppKeyClass, MyCppValueClass, MyCsKeyClass, MyCsValueClass) - * %template(Map_MyCppKeyClass_MyCppValueClass) std::map<MyCppKeyClass, MyCppValueClass >; - * - * Or if the C# class names are the same as the C++ class names, you can use: - * - * SWIG_STD_MAP_SPECIALIZED_SIMPLE(MyKeyClass, MyValueClass) - * %template(Map_MyCppKeyClass_MyCppValueClass) std::map<MyKeyClass, MyValueClass >; - * * Notes: * 1) For .NET 1 compatibility, define SWIG_DOTNET_1 when compiling the C# code. In this case * the C# wrapper has only basic functionality. @@ -39,69 +28,13 @@ #include <stdexcept> %} -// A minimal implementation to be used when no specialization exists. -%define SWIG_STD_MAP_MINIMAL_INTERNAL(K, T) - public: - m... [truncated message content] |
From: <spl...@us...> - 2009-08-10 14:01:25
|
Revision: 11526 http://swig.svn.sourceforge.net/swig/?rev=11526&view=rev Author: sploving Date: 2009-08-10 14:01:05 +0000 (Mon, 10 Aug 2009) Log Message: ----------- fix typemap_subst.i testcase Modified Paths: -------------- branches/gsoc2009-sploving/Examples/Makefile.in branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile.in branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx branches/gsoc2009-sploving/configure.in Removed Paths: ------------- branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile Modified: branches/gsoc2009-sploving/Examples/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/Makefile.in 2009-08-10 10:46:07 UTC (rev 11525) +++ branches/gsoc2009-sploving/Examples/Makefile.in 2009-08-10 14:01:05 UTC (rev 11526) @@ -1152,13 +1152,13 @@ scilab: $(SRCS) $(SWIG) -scilab $(SWIGOPT) $(INTERFACEPATH) - + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH SCILABPATH=$(srcdir):$$SCILABPATH $(SCILAB) -nwni -nb -f builder.sce # ----------------------------------------------------------------- # Running a Scilab example # ----------------------------------------------------------------- scilab_run: - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH SCILABPATH=$(srcdir):$$SCILABPATH $(SCILAB) -nwni < runme.sci + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH SCILABPATH=$(srcdir):$$SCILABPATH $(SCILAB) -nwni -nb -f runme.sci # ----------------------------------------------------------------- # Cleaning the scilab examples Deleted: branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile 2009-08-10 10:46:07 UTC (rev 11525) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile 2009-08-10 14:01:05 UTC (rev 11526) @@ -1,40 +0,0 @@ -####################################################################### -# Makefile for scilab test-suite -####################################################################### - -LANGUAGE = scilab -SCILAB = scilab -SCRIPTSUFFIX = _runme.sci -srcdir = . -top_srcdir = ../../.. -top_builddir = ../../.. - -include $(srcdir)/../common.mk - -# Overridden variables here -# none! - -# Rules for the different types of tests -%.cpptest: - -%.ctest: - $(setup) - +$(swig_and_compile_c) - $(run_testcase) - -%.multicpptest: - -# Runs the testcase. A testcase is only run if -# a file is found which has _runme.sci appended after the testcase name. -run_testcase = \ - if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) -nwni -nb -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \ - fi; \ - - -# Clean: remove the generated .sci file -%.clean: - @rm -f $*.sci *_wrap.c - -clean: - $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile scilab_clean Modified: branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile.in 2009-08-10 10:46:07 UTC (rev 11525) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/Makefile.in 2009-08-10 14:01:05 UTC (rev 11526) @@ -9,37 +9,35 @@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ -C_TEST_CASES += \ - integers \ - include $(srcdir)/../common.mk # Overridden variables here # none! # Rules for the different types of tests +%.cpptest: + %.ctest: $(setup) + cp ../$*.i $*.i + if [ -f ../$*.h ]; then (cp ../$*.h $*.h; ) fi; +$(swig_and_compile_c) $(run_testcase) %.multicpptest: - $(setup) - +$(swig_and_compile_multi_cpp) - $(run_testcase) - + # Runs the testcase. A testcase is only run if # a file is found which has _runme.sci appended after the testcase name. run_testcase = \ if [ -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then ( \ - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH $(RUNTOOL) $(SCILAB) -nwni -nb -f $(srcdir)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ; ) \ fi; \ # Clean: remove the generated .sci file %.clean: - @rm -f $*.sci *_wrap.c + @rm -f $*.sci *_wrap.c *.i *.h clean: $(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile scilab_clean Modified: branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg 2009-08-10 10:46:07 UTC (rev 11525) +++ branches/gsoc2009-sploving/Lib/scilab/sciruntime.swg 2009-08-10 14:01:05 UTC (rev 11526) @@ -1,3 +1,5 @@ +%insert(runtime) "swigrun.swg"; +%insert(runtime) "swigerrors.swg"; %insert(runtime) %{ void SWIG_Error(int code, const char *msg) { Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-10 10:46:07 UTC (rev 11525) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-10 14:01:05 UTC (rev 11526) @@ -119,6 +119,7 @@ Delete(f_builder_code); /* Dump out all the files */ + SwigType_emit_type_table(f_runtime, f_wrappers); Dump(f_runtime, f_begin); Dump(f_header, f_begin); Dump(f_wrappers, f_begin); Modified: branches/gsoc2009-sploving/configure.in =================================================================== --- branches/gsoc2009-sploving/configure.in 2009-08-10 10:46:07 UTC (rev 11525) +++ branches/gsoc2009-sploving/configure.in 2009-08-10 14:01:05 UTC (rev 11526) @@ -2168,6 +2168,12 @@ #fi AC_SUBST(SKIP_UFFI) +SKIP_SCILAB= +if test -z "$SCILAB"; then + SKIP_SCILAB="1" +fi +AC_SUBST(SKIP_SCILAB) + #---------------------------------------------------------------- # Additional language dependencies #---------------------------------------------------------------- @@ -2248,6 +2254,7 @@ Examples/test-suite/cffi/Makefile \ Examples/test-suite/uffi/Makefile \ Examples/test-suite/r/Makefile \ + Examples/test-suite/scilab/Makefile \ Lib/ocaml/swigp4.ml ]) AC_CONFIG_FILES([preinst-swig], [chmod +x preinst-swig]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-08-13 15:55:28
|
Revision: 11548 http://swig.svn.sourceforge.net/swig/?rev=11548&view=rev Author: sploving Date: 2009-08-13 15:55:19 +0000 (Thu, 13 Aug 2009) Log Message: ----------- add overload_extend and overload_extendc testcases Modified Paths: -------------- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/scilab/overload_extend_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/overload_extendc_runme.sci Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/overload_extend_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/overload_extend_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/overload_extend_runme.sci 2009-08-13 15:55:19 UTC (rev 11548) @@ -0,0 +1,9 @@ +exec loader.sce + +x = new_Foo(); +if Foo_test(x) <> 0 then pause, end +if Foo_test(x, 1) <> 1 then pause, end +if Foo_test(x, 2, 3) <> 5 then pause, end +if Foo_test(x, "Hello, swig!") <> 2 then pause, end + +exit Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/overload_extendc_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/overload_extendc_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/overload_extendc_runme.sci 2009-08-13 15:55:19 UTC (rev 11548) @@ -0,0 +1,11 @@ +exec loader.sce + +x = new_Foo(); +if Foo_test(x, 1) <> 1 then pause, end +if Foo_test(x, "Hello swig!") <> 2 then pause, end +if Foo_test(x, 2, 3) <> 3 then pause, end +if Foo_test(x, x) <> 30 then pause, end +if Foo_test(x, x, 4) <> 24 then pause, end +if Foo_test(x, x, 4, 5) <> 9 then pause, end + +exit Modified: branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg =================================================================== --- branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-08-13 14:58:27 UTC (rev 11547) +++ branches/gsoc2009-sploving/Lib/scilab/scitypemaps.swg 2009-08-13 15:55:19 UTC (rev 11548) @@ -84,8 +84,11 @@ if (getVarType(piAddrVar) != sci_strings || iRows != 1 || iCols != 1 || isVarComplex(piAddrVar)) { Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } - getMatrixOfString(piAddrVar, &iRows, &iCols,&_piLength, &_pstStrings); + getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, NULL); + _pstStrings = (char *)malloc(sizeof(char) * _piLength + 1); + getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, &_pstStrings); $1 = strdup(_pstStrings); + free(_pstStrings); } %typemap(in) signed char [ANY] (int iRows, int iCols) { @@ -407,10 +410,6 @@ LhsVar(iOutNum) = iVarOut; } -%typemap(freearg, noblock=1) char * { - if ($1) free($1); -} - %typemap(out) enum SWIGTYPE (int iRowsOut, int iColsOut) { int temp; temp = (int)($result); @@ -480,7 +479,7 @@ Scierror(999, _("%s: Wrong type for input argument #%d: Real scalar expected.\n"), fname, $argnum); } getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, NULL); - _pstStrings = (char *)malloc(sizeof(char) * _piLength); + _pstStrings = (char *)malloc(sizeof(char) * _piLength + 1); getMatrixOfString(piAddrVar, &iRows, &iCols, &_piLength, &_pstStrings); $1 = strdup(_pstStrings); free(_pstStrings); @@ -782,6 +781,7 @@ LhsVar(iOutNum) = iVarOut; } +/* pointer to basic C types */ %typemap(varout,noblock=1) signed char *, short *, unsigned char *, @@ -796,6 +796,7 @@ LhsVar(iOutNum) = iVarOut; } +/* Arrays */ %typemap(varout,noblock=1) char [ANY] { char **pstData = NULL; pstData = (char **)malloc(sizeof(char *)); @@ -855,12 +856,14 @@ LhsVar(iOutNum) = iVarOut; } +/* Enums */ %typemap(varout,noblock=1) enum SWIGTYPE { int temp = $result; createMatrixOfInteger32(iVarOut, iRowsOut, iColsOut, &temp); LhsVar(iOutNum) = iVarOut; } +/* Other types */ %typemap(varout,noblock=1) SWIGTYPE * { createPointer(iVarOut, (void *)$result); LhsVar(iOutNum) = iVarOut; @@ -870,8 +873,134 @@ createPointer(iVarOut, (void *)&$result); LhsVar(iOutNum) = iVarOut; } - + /* ------------------------------------------------------------ + * --- Typecheck typemaps --- + * ------------------------------------------------------------ */ +/* Basic C types */ +%typecheck(SWIG_TYPECHECK_CHAR) char { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_strings) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_INT8) signed char { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_UINT8) unsigned char { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_INT16) short { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_UINT16) unsigned short { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_INT32) int, + long { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_UINT32) unsigned int, + unsigned long { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + + +%typecheck(SWIG_TYPECHECK_DOUBLE) double { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_FLOAT) float { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_STRING) char * { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_strings) ? 1 : 0; +} + +/* Arrays */ +%typecheck(SWIG_TYPECHECK_CHAR_ARRAY) char [ANY] { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_strings) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_INT8_ARRAY) signed char [ANY] { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_INT16_ARRAY) unsigned char [ANY], + short [ANY] { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_INT32_ARRAY) unsigned short [ANY], + int [ANY], + long [ANY] { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_INT64_ARRAY) unsigned int [ANY], + unsigned long [ANY] { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_DOUBLE_ARRAY) double [ANY]{ + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_FLOAT_ARRAY) float [ANY]{ + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_matrix) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_STRING_ARRAY) char ** { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_strings) ? 1 : 0; +} + +%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE * { + int *piAddrVar; + getVarAddressFromPosition($argnum, &piAddrVar); + $1 = (getVarType(piAddrVar) == sci_lufact_pointer) ? 1 : 0; +} + +/* ------------------------------------------------------------ * size_t mapped as int * ------------------------------------------------------------ */ Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-13 14:58:27 UTC (rev 11547) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-13 15:55:19 UTC (rev 11548) @@ -30,6 +30,7 @@ public: SCILAB(): f_builder_code(NewString("")) { + allow_overloading(); } @@ -154,7 +155,7 @@ // int destructor = (!Cmp(nodeType, "destructor")); String *storage = Getattr(n, "storage"); bool overloaded = !!Getattr(n, "sym:overloaded"); - //bool last_overload = overloaded && !Getattr(n, "sym:nextSibling"); + bool last_overload = overloaded && !Getattr(n, "sym:nextSibling"); String *iname = Getattr(n, "sym:name"); String *wname = Swig_name_wrapper(iname); String *overname = Copy(wname); @@ -263,6 +264,16 @@ } Printv(f->code, outarg, NIL); + /* Insert constraint checking code */ + for (p = l; p;) { + if ((tm = Getattr(p, "tmap:check"))) { + Printv(f->code, tm, "\n", NIL); + p = Getattr(p, "tmap:check:next"); + } else { + p = nextSibling(p); + } + } + /* Insert cleanup code */ String *cleanup = NewString(""); for (p = l; p;) { @@ -304,6 +315,10 @@ /* Dump the wrapper function */ Wrapper_print(f, f_wrappers); DelWrapper(f); + + if (last_overload) + dispatchFunction(n); + Printf(f_builder_code, "\"%s\",\"%s\";", iname, wname); Delete(overname); @@ -312,7 +327,39 @@ return SWIG_OK; } + + /* ----------------------------------------------------------------------- + * dispatchFunctionWrapper() + * ----------------------------------------------------------------------- */ + + void dispatchFunction(Node *n) { + Wrapper *f = NewWrapper(); + String *iname = Getattr(n, "sym:name"); + String *wname = Swig_name_wrapper(iname); + int maxargs; + String *dispatch = Swig_overload_dispatch(n, "return %s(fname, fname_len);", &maxargs); + String *tmp = NewString(""); + + Printv(f->def, "int ", wname, " (char *fname,unsigned long fname_len) {\n", NIL); + Wrapper_add_local(f, "argc", "int argc = Rhs;"); + //Printf(tmp, "octave_value_ref argv[%d]={", maxargs); + //for (int j = 0; j < maxargs; ++j) + //Printf(tmp, "%soctave_value_ref(args,%d)", j ? "," : " ", j); + //Printf(tmp, "}"); + //Wrapper_add_local(f, "argv", tmp); + Printv(f->code, dispatch, "\n", NIL); + Printf(f->code, "error(\"No matching function for overload\");\n", iname); + Printf(f->code, "return 0;\n"); + Printv(f->code, "}\n", NIL); + + Wrapper_print(f, f_wrappers); + Delete(tmp); + DelWrapper(f); + Delete(dispatch); + Delete(wname); + } + /* ----------------------------------------------------------------------- * variableWrapper() * ----------------------------------------------------------------------- */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-08-14 09:22:44
|
Revision: 11566 http://swig.svn.sourceforge.net/swig/?rev=11566&view=rev Author: sploving Date: 2009-08-14 09:22:36 +0000 (Fri, 14 Aug 2009) Log Message: ----------- add 'funcptr, inctest, integers, preproc, name' testcases and fix the empty testcase Modified Paths: -------------- branches/gsoc2009-sploving/Examples/Makefile.in branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/test-suite/scilab/funcptr_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/inctest_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/integers_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/name_runme.sci branches/gsoc2009-sploving/Examples/test-suite/scilab/preproc_runme.sci Modified: branches/gsoc2009-sploving/Examples/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/Makefile.in 2009-08-14 09:01:31 UTC (rev 11565) +++ branches/gsoc2009-sploving/Examples/Makefile.in 2009-08-14 09:22:36 UTC (rev 11566) @@ -1152,7 +1152,10 @@ scilab: $(SRCS) $(SWIG) -scilab $(SWIGOPT) $(INTERFACEPATH) - env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH SCILABPATH=$(srcdir):$$SCILABPATH $(SCILAB) -nwni -nb -f builder.sce + if [ -f builder.sce ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH SCILABPATH=$(srcdir):$$SCILABPATH $(SCILAB) -nwni -nb -f builder.sce; \ + fi + # ----------------------------------------------------------------- # Running a Scilab example # ----------------------------------------------------------------- Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/funcptr_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/funcptr_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/funcptr_runme.sci 2009-08-14 09:22:36 UTC (rev 11566) @@ -0,0 +1,6 @@ +exec loader.sce; + +if add(7, 9) <> 16 then pause, end +if do_op(7, 9, funcvar_get()) <> 16 then pause, end + +exit Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/inctest_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/inctest_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/inctest_runme.sci 2009-08-14 09:22:36 UTC (rev 11566) @@ -0,0 +1,19 @@ +exec loader.sce; + +try + a = new_A(); +catch + printf("did not find A\ntherefore, I did not include ""testdir/subdir1/hello.i""\n"); +end + +try + b = new_B(); +catch + printf("did not find B\ntherefore, I did not include ""testdir/subdir2/hello.i""\n"); +end + +if importtest1(5) <> 15 then pause, end +if importtest2("black") <> "white" then pause, end + +exit + Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/integers_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/integers_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/integers_runme.sci 2009-08-14 09:22:36 UTC (rev 11566) @@ -0,0 +1,13 @@ +exec loader.sce; + +if signed_char_identity(-13) <> -13 then pause, end +if unsigned_char_identity(251) <> 251 then pause, end +if signed_short_identity(-31000) <> -31000 then pause, end +if unsigned_short_identity(61000) <> 61000 then pause, end +if signed_int_identity(42) <> 42 then pause, end +if unsigned_int_identity(123456) <> 123456 then pause, end +if signed_long_identity(65537) <> 65537 then pause, end +if unsigned_long_identity(654321) <> 654321 then pause, end + +exit + Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/name_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/name_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/name_runme.sci 2009-08-14 09:22:36 UTC (rev 11566) @@ -0,0 +1,7 @@ +exec loader.sce; + +foo_2(); +if bar_2_get() <> 17 then pause, end +if Baz_2_get() <> 47 then pause, end + +exit Added: branches/gsoc2009-sploving/Examples/test-suite/scilab/preproc_runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/test-suite/scilab/preproc_runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/test-suite/scilab/preproc_runme.sci 2009-08-14 09:22:36 UTC (rev 11566) @@ -0,0 +1,8 @@ +exec loader.sce; + +if endif_get() <> 1 then pause, end +if define_get() <> 1 then pause, end +if defined_get() <> 1 then pause ,end +if 2 * one_get() <> two_get() then pause, end + +exit Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-14 09:01:31 UTC (rev 11565) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-14 09:22:36 UTC (rev 11566) @@ -26,10 +26,11 @@ File *f_init; String *f_builder_code; + bool hasfunction_flag; public: SCILAB(): - f_builder_code(NewString("")) { + f_builder_code(NewString("")), hasfunction_flag(false) { allow_overloading(); } @@ -110,14 +111,19 @@ Language::top(n); /* create the file to generate the module: "builder.sce" */ - Printf(f_builder_code, "];\n"); - Printf(f_builder_code, "ilib_build(ilib_name,table,files,libs);\n"); - Printf(f_builder_code, "exit"); - File *f_builder=NewFile(NewStringf("%sbuilder.sce", SWIG_output_directory()), "w", SWIG_output_files()); - Printv(f_builder, f_builder_code, NIL); - Close(f_builder); - Delete(f_builder); - Delete(f_builder_code); + if(hasfunction_flag) { + Printf(f_builder_code, "];\n"); + Printf(f_builder_code, "ilib_build(ilib_name,table,files,libs);\n"); + Printf(f_builder_code, "exit"); + File *f_builder=NewFile(NewStringf("%sbuilder.sce", SWIG_output_directory()), "w", SWIG_output_files()); + Printv(f_builder, f_builder_code, NIL); + Close(f_builder); + Delete(f_builder); + Delete(f_builder_code); + } + else { + Delete(f_builder_code); + } /* Dump out all the files */ SwigType_emit_type_table(f_runtime, f_wrappers); @@ -143,6 +149,8 @@ virtual int functionWrapper(Node *n) { + hasfunction_flag = true; + /* A new wrapper function object */ Wrapper *f = NewWrapper(); Parm *p; @@ -366,6 +374,8 @@ virtual int variableWrapper(Node *n) { + hasfunction_flag = true; + /* Get the useful information from the node */ String *name = Getattr(n, "name"); String *iname = Getattr(n, "sym:name"); @@ -479,6 +489,8 @@ virtual int constantWrapper(Node *n) { + hasfunction_flag = true; + /* Get the useful information from the node */ String *name = Getattr(n, "name"); String *iname = Getattr(n, "sym:name"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <spl...@us...> - 2009-08-15 09:29:24
|
Revision: 11581 http://swig.svn.sourceforge.net/swig/?rev=11581&view=rev Author: sploving Date: 2009-08-15 09:29:10 +0000 (Sat, 15 Aug 2009) Log Message: ----------- add 'class' example Modified Paths: -------------- branches/gsoc2009-sploving/Examples/Makefile.in branches/gsoc2009-sploving/Source/Modules/scilab.cxx Added Paths: ----------- branches/gsoc2009-sploving/Examples/scilab/class/ branches/gsoc2009-sploving/Examples/scilab/class/Makefile branches/gsoc2009-sploving/Examples/scilab/class/example.cxx branches/gsoc2009-sploving/Examples/scilab/class/example.h branches/gsoc2009-sploving/Examples/scilab/class/example.i branches/gsoc2009-sploving/Examples/scilab/class/runme.sci Modified: branches/gsoc2009-sploving/Examples/Makefile.in =================================================================== --- branches/gsoc2009-sploving/Examples/Makefile.in 2009-08-15 07:39:56 UTC (rev 11580) +++ branches/gsoc2009-sploving/Examples/Makefile.in 2009-08-15 09:29:10 UTC (rev 11581) @@ -1145,7 +1145,6 @@ SCILAB_LIB = @SCILABLIB@ SCILAB = @SCILAB@ - # ---------------------------------------------------------------- # Build a C dynamically loadable module # ---------------------------------------------------------------- @@ -1156,6 +1155,16 @@ env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH SCILABPATH=$(srcdir):$$SCILABPATH $(SCILAB) -nwni -nb -f builder.sce; \ fi +# ---------------------------------------------------------------- +# Build a C++ dynamically loadable module +# ---------------------------------------------------------------- + +scilab_cpp: $(SRCS) + $(SWIG) -scilab -c++ $(SWIGOPT) $(INTERFACEPATH) + if [ -f builder.sce ]; then \ + env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH SCILABPATH=$(srcdir):$$SCILABPATH $(SCILAB) -nwni -nb -f builder.sce; \ + fi + # ----------------------------------------------------------------- # Running a Scilab example # ----------------------------------------------------------------- Added: branches/gsoc2009-sploving/Examples/scilab/class/Makefile =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/class/Makefile (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/class/Makefile 2009-08-15 09:29:10 UTC (rev 11581) @@ -0,0 +1,17 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.cxx +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' scilab_cpp + + +clean:: + $(MAKE) -f $(TOP)/Makefile scilab_clean + rm -f *.sce *.so lib*lib.c *_wrap.c *_wrap.cxx + +check: all + $(MAKE) -f $(TOP)/Makefile scilab_run Added: branches/gsoc2009-sploving/Examples/scilab/class/example.cxx =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/class/example.cxx (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/class/example.cxx 2009-08-15 09:29:10 UTC (rev 11581) @@ -0,0 +1,28 @@ +/* File : example.c */ + +#include "example.h" +#define M_PI 3.14159265358979323846 + +/* Move the shape to a new location */ +void Shape::move(double dx, double dy) { + x += dx; + y += dy; +} + +int Shape::nshapes = 0; + +double Circle::area(void) { + return M_PI*radius*radius; +} + +double Circle::perimeter(void) { + return 2*M_PI*radius; +} + +double Square::area(void) { + return width*width; +} + +double Square::perimeter(void) { + return 4*width; +} Added: branches/gsoc2009-sploving/Examples/scilab/class/example.h =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/class/example.h (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/class/example.h 2009-08-15 09:29:10 UTC (rev 11581) @@ -0,0 +1,35 @@ +/* File : example.h */ + +class Shape { +public: + Shape() { + nshapes++; + } + virtual ~Shape() { + nshapes--; + }; + double x, y; + void move(double dx, double dy); + virtual double area(void) = 0; + virtual double perimeter(void) = 0; + static int nshapes; +}; + +class Circle : public Shape { +private: + double radius; +public: + Circle(double r) : radius(r) { }; + virtual double area(void); + virtual double perimeter(void); +}; + +class Square : public Shape { +private: + double width; +public: + Square(double w) : width(w) { }; + virtual double area(void); + virtual double perimeter(void); +}; + Added: branches/gsoc2009-sploving/Examples/scilab/class/example.i =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/class/example.i (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/class/example.i 2009-08-15 09:29:10 UTC (rev 11581) @@ -0,0 +1,10 @@ +/* File : example.i */ +%module example + +%{ +#include "example.h" +%} + +/* Let's just grab the original header file here */ +%include "example.h" + Added: branches/gsoc2009-sploving/Examples/scilab/class/runme.sci =================================================================== --- branches/gsoc2009-sploving/Examples/scilab/class/runme.sci (rev 0) +++ branches/gsoc2009-sploving/Examples/scilab/class/runme.sci 2009-08-15 09:29:10 UTC (rev 11581) @@ -0,0 +1,47 @@ +// loader the *.so +exec loader.sce; + +// ----- Object creation ----- + +printf("Creating some objects:\n"); +c = new_Circle(10) +s = new_Square(10) + +// ----- Access a static member ----- + +printf("\nA total of %i shapes were created\n", Shape_nshapes_get()); + +// ----- Member data access ----- + +// Set the location of the object + +Shape_x_set(c, 20); +Shape_y_set(c, 30); + +Shape_x_set(s, -10); +Shape_y_set(s, 5); + +printf("\nHere is their current position:\n"); +printf(" Circle = (%f, %f)\n", Shape_x_get(c), Shape_y_get(c)); +printf(" Square = (%f, %f)\n", Shape_x_get(s), Shape_y_get(s)); + +// ----- Call some methods ----- + +printf("\nHere are some properties of the shapes:\n"); +function print_shape(o) + printf(" area = %f\n", Shape_area(o)); + printf(" perimeter = %f\n", Shape_perimeter(o)); +endfunction +print_shape(c); +print_shape(s); + +printf("\nGuess I will clean up now\n"); + +// Note: this invokes the virtual destructor +delete_Circle(c); +delete_Square(s); + +printf("%i shapes remain\n", Shape_nshapes_get()); +printf("Goodbye\n"); + +exit Modified: branches/gsoc2009-sploving/Source/Modules/scilab.cxx =================================================================== --- branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-15 07:39:56 UTC (rev 11580) +++ branches/gsoc2009-sploving/Source/Modules/scilab.cxx 2009-08-15 09:29:10 UTC (rev 11581) @@ -95,20 +95,32 @@ Swig_banner(f_begin); /* Include some header file of scilab */ + if (CPlusPlus) + Printf(f_runtime, "extern \"C\" {\n"); + Printf(f_runtime, "#include \"stack-c.h\"\n"); Printf(f_runtime, "#include \"sciprint.h\"\n"); Printf(f_runtime, "#include \"Scierror.h\"\n"); Printf(f_runtime, "#include \"api_scilab.h\"\n"); Printf(f_runtime, "#include \"localization.h\"\n"); + if (CPlusPlus) + Printf(f_runtime, "}\n"); + /* Initialize the builder.sce file code */ Printf(f_builder_code, "ilib_name = \"%slib\";\n", module); Printf(f_builder_code, "files = [\"%s\",\"%s.o\"];\n", outfile, module); Printf(f_builder_code, "libs = [];\n"); Printf(f_builder_code, "table = ["); + + if (CPlusPlus) + Printf(f_wrappers, "extern \"C\" {\n"); /* Emit code for children */ Language::top(n); + + if (CPlusPlus) + Printf(f_wrappers, "}\n"); /* create the file to generate the module: "builder.sce" */ if(hasfunction_flag) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |