https://swig.svn.sourceforge.net/svnroot/swig/trunk ........ r10498 | talby | 2008-05-26 22:09:56 +0200 (Pn, 26 maj 2008) | 2 lines run test cases in the Perl set by the --with-perl5 configure option. ........ r10499 | talby | 2008-05-26 23:04:06 +0200 (Pn, 26 maj 2008) | 3 lines The perl5 minherit runtime test will work better if the classes are actually built under SWIGPERL. ........ r10503 | wsfulton | 2008-05-28 11:44:37 +0200 (Śr, 28 maj 2008) | 1 line Fix variable wrappers when using -proxy. Patch from Jan Jezabek ........ r10504 | bhy | 2008-05-28 19:27:48 +0200 (Śr, 28 maj 2008) | 2 lines Fixed SF #1971977: typo in pycontainer.swg (related to -extranative option) ........ r10506 | wsfulton | 2008-05-29 02:45:28 +0200 (Cz, 29 maj 2008) | 1 line Fix variable wrappers when using -noproxy ........ r10508 | bhy | 2008-05-30 15:53:33 +0200 (Pt, 30 maj 2008) | 1 line Fixed SF #1976978, apply the macros for primitive types to std::wstring ........ r10511 | olly | 2008-05-30 18:11:27 +0200 (Pt, 30 maj 2008) | 4 lines Fix typo in handling of /*@SWIG[...]*/ comments in the scanner. This just meant we were only actually looking for /*@SWI at the start of the comment, so was pretty harmless in practice. ........ r10515 | wsfulton | 2008-06-02 22:10:40 +0200 (Pn, 02 cze 2008) | 1 line Fix samename testcase for c# and java ........ r10516 | wsfulton | 2008-06-02 22:15:39 +0200 (Pn, 02 cze 2008) | 1 line Fix enums when using -noproxy ........ r10518 | bhy | 2008-06-07 13:20:07 +0200 (So, 07 cze 2008) | 4 lines Added a test case for keyword renaming. Now it works for Python in SWIG's -c++ mode, but in C mode it doesn't work! (you can try with make keyword_rename.ctest) ........ r10519 | bhy | 2008-06-07 15:40:51 +0200 (So, 07 cze 2008) | 1 line fixed keyword_rename.ctest tese case, caused by a mistake in Swig/naming.c ........ r10527 | mgossage | 2008-06-17 04:57:15 +0200 (Wt, 17 cze 2008) | 1 line [lua] bugfix 1938142 (bool& and bool* support) ........ r10530 | wsfulton | 2008-06-19 22:02:13 +0200 (Cz, 19 cze 2008) | 1 line Add R keyword support. Rename keywords for successful compilation of Java and C# code. More consistent keyword warnings across the different languages. ........ r10531 | wsfulton | 2008-06-19 23:15:48 +0200 (Cz, 19 cze 2008) | 1 line add complete list of R reserved words ........ r10536 | wsfulton | 2008-06-21 13:35:33 +0200 (So, 21 cze 2008) | 1 line better terminology for static types ........ r10537 | wsfulton | 2008-06-21 13:42:48 +0200 (So, 21 cze 2008) | 1 line remove raise as keyword test- it conflicts with _raise in LIBCMT on windows ........ r10539 | wsfulton | 2008-06-21 17:21:29 +0200 (So, 21 cze 2008) | 1 line Lua example warning removal fixes for vc++ ........ r10540 | wsfulton | 2008-06-21 17:23:02 +0200 (So, 21 cze 2008) | 1 line Remove some vc++ /W4 warnings ........ r10541 | wsfulton | 2008-06-21 18:04:55 +0200 (So, 21 cze 2008) | 1 line minor vc++ /W4 warning fixes ........ r10542 | wsfulton | 2008-06-21 21:07:51 +0200 (So, 21 cze 2008) | 1 line 'byte' is already used in Ruby on windows, so use another keyword ........ r10543 | wsfulton | 2008-06-21 22:45:32 +0200 (So, 21 cze 2008) | 1 line Fix crashing in the Ruby reject method in the STL wrappers ........ r10544 | wsfulton | 2008-06-21 22:48:28 +0200 (So, 21 cze 2008) | 1 line Fix crashing in the Ruby reject method in the STL wrappers ........ r10545 | wsfulton | 2008-06-21 22:49:10 +0200 (So, 21 cze 2008) | 1 line remove unnecessary variable int the char **STRING_ARRAY out typemap ........ r10546 | wsfulton | 2008-06-21 23:07:49 +0200 (So, 21 cze 2008) | 1 line Fix Ruby C++ example dependencies in dsp files ........ r10547 | wsfulton | 2008-06-22 00:25:36 +0200 (N, 22 cze 2008) | 1 line Fix unused parameter warnings in python when using gcc's -W -Wall options ........ r10548 | wsfulton | 2008-06-22 00:26:35 +0200 (N, 22 cze 2008) | 1 line Fix virtual destructor ........ r10549 | wsfulton | 2008-06-22 01:25:20 +0200 (N, 22 cze 2008) | 1 line various warning fixes ........ r10550 | wsfulton | 2008-06-22 02:09:11 +0200 (N, 22 cze 2008) | 1 line Another fix for the JVM hanging on exit problem when using directors ........ r10551 | wsfulton | 2008-06-22 02:09:51 +0200 (N, 22 cze 2008) | 1 line documentation sections update ........ r10552 | wsfulton | 2008-06-22 02:18:10 +0200 (N, 22 cze 2008) | 1 line more docs on defining macros for the thread hanging problem ........ r10558 | wsfulton | 2008-06-22 23:30:20 +0200 (N, 22 cze 2008) | 1 line fix unused parms in last commit for C code ........ r10559 | wsfulton | 2008-06-23 00:12:43 +0200 (Pn, 23 cze 2008) | 1 line Suppress unused methods warning for VC++ ........ r10560 | wsfulton | 2008-06-23 22:26:07 +0200 (Pn, 23 cze 2008) | 1 line fix partialcheck-test-suite and parallel make for r, chicken, tcl and php ........ r10561 | wsfulton | 2008-06-23 22:39:41 +0200 (Pn, 23 cze 2008) | 1 line correct message display when running the partialcheck-test-suite make target ........ r10562 | wsfulton | 2008-06-23 23:14:53 +0200 (Pn, 23 cze 2008) | 1 line fix typo ........ r10563 | olly | 2008-06-23 23:23:54 +0200 (Pn, 23 cze 2008) | 3 lines Fix bad use of Python API (untested, since I can't even compile this code on x86-64!) ........ r10564 | olly | 2008-06-24 00:58:03 +0200 (Wt, 24 cze 2008) | 3 lines [PHP] Fix segfault when wrapping a non-class function marked with %newobject (testcase char_strings). ........ r10565 | olly | 2008-06-24 02:27:34 +0200 (Wt, 24 cze 2008) | 3 lines [PHP] Fix assertion failure when handling %typemap(in,numinputs=0) (testcase ignore_parameter). ........ r10566 | olly | 2008-06-24 02:33:08 +0200 (Wt, 24 cze 2008) | 2 lines [PHP] Fix typemap_namespace.i to not try to copy a non-existent typemap. ........ r10567 | olly | 2008-06-24 02:41:07 +0200 (Wt, 24 cze 2008) | 3 lines Clean up dead and unused code in SwigToPhpType(), and rename to GetShadowReturnType(). ........ r10568 | olly | 2008-06-24 02:42:29 +0200 (Wt, 24 cze 2008) | 2 lines Fix cosmetic typo in string constant. ........ r10574 | wsfulton | 2008-06-24 22:10:28 +0200 (Wt, 24 cze 2008) | 1 line zap last entry ........ r10575 | wsfulton | 2008-06-24 22:11:46 +0200 (Wt, 24 cze 2008) | 1 line variable name changes to remove php keywords ........ r10576 | wsfulton | 2008-06-24 22:12:08 +0200 (Wt, 24 cze 2008) | 1 line variable name hiding fix ........ r10577 | wsfulton | 2008-06-24 22:12:43 +0200 (Wt, 24 cze 2008) | 1 line More info about numobjects added ........ r10578 | wsfulton | 2008-06-24 22:13:41 +0200 (Wt, 24 cze 2008) | 1 line update for 1.3.36 release ........ r10579 | wsfulton | 2008-06-24 23:48:46 +0200 (Wt, 24 cze 2008) | 1 line remove deprecated -c commandline option (runtime library generation) ........ r10580 | wsfulton | 2008-06-24 23:53:12 +0200 (Wt, 24 cze 2008) | 1 line correct comment about deprecated option ........ r10582 | wsfulton | 2008-06-25 01:00:27 +0200 (Śr, 25 cze 2008) | 1 line use rsync and ssh to upload releases to SourceForge as ftp no longer works ........ r10584 | wsfulton | 2008-06-25 01:24:48 +0200 (Śr, 25 cze 2008) | 1 line correction for 1.3.36 ........ r10588 | wsfulton | 2008-06-25 02:16:04 +0200 (Śr, 25 cze 2008) | 1 line section update ........ r10589 | wsfulton | 2008-06-25 02:16:40 +0200 (Śr, 25 cze 2008) | 1 line bump version to 1.3.37 ........ r10594 | wsfulton | 2008-06-26 20:33:06 +0200 (Cz, 26 cze 2008) | 1 line correct typo in first entry about %fragment ........ git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10606 626c5289-ae23-0410-ae9c-e8d60b6d4f22
372 lines
13 KiB
Text
372 lines
13 KiB
Text
SWIG TO-DO
|
|
|
|
Release: SWIG-1.3.36
|
|
|
|
-----------------------------------------------------------------------------
|
|
|
|
**** = High Priority
|
|
*** = Implement if possible.
|
|
** = Will implement if time.
|
|
* = Implement if bored (or deemed necessary).
|
|
|
|
defer = Implement in next version
|
|
|
|
CORE:
|
|
|
|
**** Add support for nested classes. The type system should be
|
|
defer ready to go. The primary obstacle lies in the target language
|
|
modules (which were never programmed with nested classes in
|
|
mind). There are also issues with nested C structures. For
|
|
example:
|
|
|
|
struct Foo {
|
|
struct {
|
|
int x,y;
|
|
} z;
|
|
};
|
|
|
|
This is one of the last remaining "hard" problems in the SWIG
|
|
core, but it is important that we solve it.
|
|
|
|
*** "Nested" typemaps. The basic idea is similar to allowing one to
|
|
use $descriptor(T) for any T, rather than just $descriptor
|
|
for the type currently being typemapped.
|
|
|
|
In short (ha!), given a previously defined typemap:
|
|
|
|
%typemap(in) Foo {
|
|
// whatever it takes to initialize $1 from $input
|
|
}
|
|
|
|
it would be possible to inline its code inside another typemap.
|
|
While the syntax is still to be defined, the use would be
|
|
along the lines of:
|
|
|
|
template <class T> class vector {
|
|
%typemap(in) vector<T> {
|
|
...
|
|
for (int i=0; i<N; i++) {
|
|
PyObject* x = ... // i-th element
|
|
$typemap(in, T, x, $1[i]);
|
|
}
|
|
...
|
|
}
|
|
...
|
|
}
|
|
|
|
i.e., when $typemap(in,Foo,x,y) is encountered, it will
|
|
be replaced by the code for %typemap(in) Foo; in the latter,
|
|
x will be replaced for $input and y will be replaced for $1.
|
|
As in the case above, x and y themselves might need to be
|
|
expanded before or after being substituted in the typemap code.
|
|
Also, $typemap(what,Foo,x,y,z,...) will be used in case of
|
|
multi-arguments typemaps. The same will hold for "out" typemaps
|
|
and all the others.
|
|
|
|
Comment by mkoeppe:
|
|
|
|
I think we need to be careful to keep the syntax readable.
|
|
I would like to get a syntax that is close to that of
|
|
typemap definitions. So consider this typemap:
|
|
|
|
%typemap(in) int { ... }
|
|
|
|
I would like to refer to this typemap like this:
|
|
|
|
$typemap(in, input=x) int = foo;
|
|
|
|
Here $input would be replaced by the given keyword argument
|
|
x, and $1 would be replaced by foo.
|
|
|
|
This syntax would extend easily to multi-typemaps:
|
|
|
|
%typemap(in) ( int FIRST, double SECOND ) { ... }
|
|
|
|
-> $typemap(in, input=x)
|
|
( int FIRST = foo, double SECOND = bar );
|
|
|
|
The advantage of this syntax would be that the formal
|
|
arguments (int FIRST, double SECOND) are close to the
|
|
actual arguments (foo, bar).
|
|
|
|
Comment by beazley
|
|
|
|
$typemap(in, input=x) int = foo;
|
|
|
|
is a little bit hard to parse in terms of variable substitution.
|
|
I'm considering something like this:
|
|
|
|
$typemap(in,1=int foo, input=x)
|
|
|
|
Note: This is partially implemented in the new Unified Typemap
|
|
Library(python,tcl,ruby and perl) via %fragments and the
|
|
SWIG_From/SWIG_AsVal methdos.
|
|
|
|
*** Implement $fail special variable substitution in wrappers. Used
|
|
to properly transfer control out of a wrapper function while
|
|
reclaiming resources.
|
|
|
|
Note: Implemented in languages that uses the UTL via the
|
|
'SWIG_fail' macro.
|
|
|
|
*** Rewrite declaration annotation to better unify %rename and related
|
|
directives. Add a selector mechanism that allows specific parse tree
|
|
nodes to be identified. For example:
|
|
|
|
%feature("foo", nodetype="class") Foo { ... some code ... };
|
|
|
|
Consider use of wildcards. Namespace/nested scope support in
|
|
%feature is currently weak. It works, but is fragile. Consider
|
|
an implementation that is better integrated with symbol table
|
|
management. Continue to consolidate SWIG directives to %feature.
|
|
|
|
Note: Initial implementation in the %rename directive.
|
|
|
|
*** Add more intelligent information related to object ownership.
|
|
SWIG should be able to automatically strip ownership from
|
|
objects when they are assigned to pointer variables and structure
|
|
members as well as stored in a container (i.e., an array of pointers).
|
|
|
|
[ Partially finished for Ruby/Perl/Tcl/Python. ]
|
|
|
|
** Restoration of the documentation system.
|
|
[ Partially done for Python. ]
|
|
|
|
|
|
** Restoration of Objective-C support.
|
|
|
|
** Unification of symbol tables and type system scopes. In a sense
|
|
they capture the same information so it is not necessary to have
|
|
both. The existence of two symbol management systems is mostly
|
|
historical.
|
|
|
|
Build
|
|
-----
|
|
|
|
Library
|
|
-------
|
|
|
|
**** Add more support for the C++ standard library. std::complex and other
|
|
core datatypes. Refine support for STL vector. Add more STL objects.
|
|
|
|
[ Partially finished for Python. ]
|
|
|
|
**** Continue to expand the set of recognized typemaps.
|
|
|
|
Windows
|
|
-------
|
|
|
|
All language modules
|
|
--------------------
|
|
|
|
Python
|
|
------
|
|
|
|
*** Ability to wrap certain classes as Python built-in types.
|
|
|
|
Perl
|
|
----
|
|
|
|
**** Rewrite runtime pointer type checking to better integrate
|
|
shadow classes. Creation of shadow classes should be done
|
|
in C instead of Perl. This will fix a number of problems
|
|
related to typemaps and reduce the amount of Perl wrapper code.
|
|
|
|
**** Create tests for existing support for operator overloading
|
|
|
|
Tcl
|
|
---
|
|
|
|
Ruby
|
|
----
|
|
|
|
**** The "Resource Management in Proxies" section of the "SWIG and C++"
|
|
chapter discusses how proxies' ownership of their associated C++
|
|
object can change, and the use of the special disown() and
|
|
acquire() methods to change this ownership status. Need to
|
|
address this for Ruby as well.
|
|
|
|
*** Add support for keyword arguments (by collecting them in a hash?).
|
|
|
|
Java
|
|
----
|
|
|
|
|
|
C#
|
|
--
|
|
|
|
PHP
|
|
---
|
|
|
|
**** Look at moving to using the UTL.
|
|
|
|
*** Director support.
|
|
|
|
** When returning wrapped objects via alternate constructors if that
|
|
pointer value already exists "out there" as a resource we should
|
|
use the same resource, we can't have multiple ref-counted resources
|
|
mapping to the same object in case it gets twice destroyed. And check
|
|
if ref count destroying is even working, see smart_pointer_rename
|
|
|
|
* Work out how classes without even inherited constructors should
|
|
interact with the php "new <class>" notation.
|
|
See: abstract_inherit_wrap.cpptest
|
|
|
|
** Look at pass by point and passby ref,
|
|
Make sometype** to be auto allocated
|
|
Make sometype& and sometype* to be autoallocated IF THEY ARE NOT
|
|
ALREADY swigtype wrapped.
|
|
|
|
* Review to see what else is missing!
|
|
|
|
Guile
|
|
-----
|
|
|
|
** Maybe rename slot setters from CLASS-SLOT-set to CLASS-SLOT-set!
|
|
to match Scheme convention for naming of mutators.
|
|
|
|
** Support keyword args.
|
|
|
|
** Director Support!
|
|
|
|
** Cleaner handling of multiple values.
|
|
Use a typemap keyword argument "numoutputs" of "out" and
|
|
"argout" to indicate how many values are returned.
|
|
|
|
** Make SWIG's types first-class by using a separate smob type for
|
|
SWIG type descriptors; enable reflection on types. (Maybe
|
|
GOOPS metaclasses?)
|
|
|
|
** Provide a clean way to construct type predicates.
|
|
|
|
** In GOOPS mode, maybe make overloaded functions methods.
|
|
|
|
** Increase the safety of destructor functions. John Lenz suggests:
|
|
|
|
I think the best way of doing this would be to use %feature to mark
|
|
which classes allow for "normal" <swig> smobs to be deleted explicitly.
|
|
|
|
We separate pointers into two classes, those that can be deleted from
|
|
scheme and those that can't. The pointers that can be deleted use the
|
|
<collectable-swig> smob and those that can not be deleted use the
|
|
<swig> smob. A user can specify which type of each object they want
|
|
with %newobject and the CONSUMED typemap.
|
|
|
|
By default, the exported destructor will only accept <collectable-swig>
|
|
smobs, because by definition, collectable-swig smobs are those that can
|
|
be deleted from scheme. This allows for the user to implement
|
|
protection. In the interface file, the user has complete control over
|
|
which objects can and can not be deleted, and can guarantee that
|
|
objects that should not be deleted can not be deleted, and that objects
|
|
that should eventually be deleted will be garbage collected.
|
|
|
|
This protection can then be overridden with a %feature directive,
|
|
something like
|
|
|
|
%feature("guile_allow_destroy_all","1") Foo::~Foo;
|
|
|
|
I don't know what word we want to use, guile_allow_destroy_all is kinda
|
|
bad. This feature would then allow for a <swig Foo *> smob to be
|
|
deleted by passing it to the destructor. This would allow users to
|
|
maintain the protection on other classes, only manually overriding the
|
|
protection on the classes that need it.
|
|
|
|
|
|
Mzscheme
|
|
--------
|
|
|
|
** Port list-vector.i and pointer-in-out.i from Guile.
|
|
|
|
** Add shadow class support for the Swindle system.
|
|
|
|
Pike
|
|
----
|
|
|
|
* Decide how to handle global variables (probably using something
|
|
like the Python module's cvar). Affects Examples/pike/simple.
|
|
|
|
* Decide how to handle static class member functions and member
|
|
variables.
|
|
|
|
* Should investigate the possibility of generating .cmod files
|
|
in addition to straight C/C++ code for extensions.
|
|
|
|
Common Lisp
|
|
-----------
|
|
|
|
* Random thoughts by mkoeppe on supporting Common Lisp implementations:
|
|
|
|
There are many different Foreign Function Interfaces (FFI) for
|
|
the various CL implementations. Probably SWIG should interface
|
|
to UFFI, a least-common-denominator FFI that supports many
|
|
implementations.
|
|
|
|
Via the s-expression SWIG module we can export SWIG's parse
|
|
tree and import it into CL. It remains to check if all
|
|
relevant information is dumped (for instance, the type
|
|
information). Experimental code is available to generate
|
|
low-level UFFI declarations from this parse tree.
|
|
|
|
However, for wrapping C++, we also need to create C wrappers
|
|
because most FFIs cannot directly import C++. A CL SWIG module
|
|
could be exporting both these wrappers and UFFI declarations.
|
|
I have experimental code (not checked in yet) that does this.
|
|
|
|
This is fine for generating low-level wrappers. But how do we
|
|
support user typemaps (like converting lists and vectors to C
|
|
arrays on input)? We have to generate Lisp code that does the
|
|
conversion and then calls the low-level wrapper. If we
|
|
generate Lisp code, it should be beautiful and readable.
|
|
Therefore, we need at least a Lisp pretty printer. A Lisp
|
|
pretty printer works best when the Lisp program is represented
|
|
not as text but as Lisp data. Moreover, typemap writers will
|
|
feel very much constrained by SWIG's capabilities for
|
|
generating wrapper code, when compared to writing Lisp macros.
|
|
Thus we would need half a re-implementation of Lisp in SWIG to
|
|
make users happy.
|
|
|
|
The solution could be the following:
|
|
|
|
** Build a SWIG library (again) and load it into a Common Lisp
|
|
implementation.
|
|
|
|
The FFI declarations could be written manually, or this could
|
|
be bootstrapped via the s-expression module or the primitive
|
|
UFFI wrappers. This should be easy because SWIG's API is quite
|
|
simple.
|
|
|
|
The embedded SWIG would be driven by a CL program. High-level
|
|
typemaps would be written as Lisp programs that generate Lisp
|
|
code.
|
|
|
|
Ocaml
|
|
-----
|
|
** I've been working with my camlp4 module and type information
|
|
from the compiler. When I'm done, the user will have access
|
|
to type inference when writing code, when the inference is
|
|
unambiguous. This allows the user to write x = _foo 1.0
|
|
instead of x = get_float (_foo (C_float 1.0)). It's not as
|
|
easy as it sounds, because O'caml doesn't keep type information
|
|
at run time, and doesn't really have a mechanism for doing what
|
|
I need. However, it's possible to write a preprocessor that
|
|
inserts correct type info at compile time.
|
|
|
|
That having been said, the program must compile for type info
|
|
to be available, so I need to attend to a lot of details; The
|
|
program must compile both with and without type augmentation.
|
|
|
|
Xml
|
|
---
|
|
|
|
|
|
Documentation
|
|
-------------
|
|
|
|
**** Extending SWIG (and internals).
|
|
|
|
*** Perl, Python, Tcl modules.
|
|
|
|
*** add section for Perl module support for operator overloading
|
|
|
|
** Add section on WAD.
|
|
|