aboutsummaryrefslogtreecommitdiff
path: root/TODO
blob: 5cba14fd3b10adce68c2965da0050eaa60468daa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
						-*- outline -*-

* for release 1.3.8 (or 1.4.0?)

** Revive the documentation

** Maybe port Wrapper DOH-ification from CVS head

** Fix all the bugs on SourceForge

** Add facilities to attach documentation strings to procedures.
   There is a patch by twburton on SF for the Python language module,
   but it needs to be done for all language modules.

** Add support for type annotations, see mkoeppe's message:
   http://mailman.cs.uchicago.edu/pipermail/swig/2001-June/002652.html

* for the unstable 1.5 series

**     Maybe use libtool rather than all the home-grown compile/link stuff

**     The behavior of SWIG with respect to call/return-by-value needs
       to be verified for all language modules.  Previously, the
       parser automatically performed the conversion of pass-by-value
       to pass-by-reference.  Unfortunately, this confused typemap
       handling and other aspects of the system.   I have removed
       this behavior.  However, in doing so, the handling of user
       defined types is passed on to the language modules.

**     All of the SWIG 1.1p5 examples need to be verified.  Changes
       in type handling and internal data structures may have broken
       a variety of things.

** [Guile] Maybe support keyword args

** [Guile] Maybe support GOOPS shadow classes

** [Guile] Support garbage collection.

*** %new annotation decides whether a pointer smob can be gc'ed.

*** New smob type `swig-gc'; instances created with
    SWIG_Guile_MakeCollectablePtr.  %new versions of the pointer
    typemaps use this function rather than SWIG_Guile_MakePtr.

*** New typemaps "destructor", "gcmarker".  Their values are taken as
    identifiers for functions taking one argument: a pointer to the
    object to be destroyed, or whose SCM-valued subobjects are to be
    marked.  After creating the pointer equivalence table, we iterate
    again over the remembered pointer types, emitting code that puts
    the functions into our type table.  No additional functions are
    generated.

*** The default for all pointer types would be: 
    %typemap(destructor) SWIGPOINTER * "free";

*** A special annotation, e.g. FREED, can be attached to the arguments
    of destructor functions, so that explicitly freed structs won't be
    collected by the GC again. Like this:

    %typemap(argout) SWIGPOINTER *FREED {
      smob-tag($source) = swig; /* non-gc */
      smob-data($source) = NULL;
    }
    void free_foo(struct foo *FREED);
    
** Make a tricky header file defining annotations invisible to the C compiler. 
   The idea is to prepare one file that serves both as a C header file 
   and a SWIG interface file.

   void add(SWIG_OUTPUT(int) *z, int x, int y)

** Unify Guile and MzScheme support, add support for more Scheme systems.