- Restructure runtime code into declarations, function
and class definitions, and initialisation code
- Rename internal functions/types to follow SWIG_Octave...
or SwigOct... naming styles
- Style/comment/whitespace cleanups
- this introduces a memory leak, which becomes significant for large
modules (many global variables) and many module re-loadings (e.g.
during a long-running script)
- the original motivation was to prevent double-frees on exit, but this
problem appears to have been fixed by the _Exit() hack in later commits,
and in any case is an issue only for Octave ~3.2, so it should be safe to
remove; tested by running Octave examples/test suite with Debian 3.2.4 and
built-from-source 3.2.4, 3.4.3, and 3.6.3
- Use call syntax instead of cmdline to choose global/noglobal load:
global: 'example;', noglobal: 'example = example;'
- All functions loaded with Octave 'autoload' command; correctly
loads .oct module and prevents segfault in Octave 3.0.5
- Functions no longer installed as global variables as well,
so global operator dispatch now only looks for functions
- Octave at-exit function created from string, not function,
so no dependence on loaded .oct files at cleanup time
- C at-exit function now immediately exits Octave (with correct
status) to prevent seg-fault due to dodgy memory cleanup
in some Octave versions
- Documentation string for module loading function
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13088 626c5289-ae23-0410-ae9c-e8d60b6d4f22
- New helper function Octave_begin_function writes function declaration
and installer function definition using SWIG_DEFUN macro, which in
turn uses Octave DEFUNX_DLD macro
- Can now use Octave's dynamic module loader to load functions safely
- Link documentation of public wrapping functions through DEFUNX_DLD
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13087 626c5289-ae23-0410-ae9c-e8d60b6d4f22
The Octave run-time allows global operators to be implemented,
e.g. op_scalar_add_X for adding a scalar and a wrapped struct X.
However it doesn't currently seem possible for these operators to
map to SWIG-wrapped functions. This is because dispatch_global_op()
looks for the operators to be installed as global variables, whereas
install_global() installs SWIG-wrapped functions as builtin functions;
the two appear to be separate symbol tables in Octave.
This patch modifies install_global() to install global operator functions
as both builtin functions and as global variables, where the value of the
global variable is a function handle to the operator function. It decides
if a function is a global operator if it begins with the prefix "op_"; this
prefix can be modified through a new command-line variable. It also always
installs the operators globally, regardless of whether the rest of the module
is being loaded globally. To accomplish this, install_global() is now always
called, but takes a bool argument specifying whether it should load symbols
globally. If a function is not a global operator, install_global() should
behave as before.
Tested that this compiles and works on Octave 3.2.4 and 3.4.0.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12675 626c5289-ae23-0410-ae9c-e8d60b6d4f22
The Python operator model, when evaluating e.g. x + y, is to call
x.__add__(y), then y.__radd__(x) if the former does not exist, etc.
This patch adds similar functionality to the SWIG runtime code.
For the special case of the comparison operators __l*__ and __g*__,
the reverse operators are __g*__ and __l*__ respectively.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12674 626c5289-ae23-0410-ae9c-e8d60b6d4f22
According to the Octave changelog (ChangeLog and src/ChangeLog
in the Octave 3.4.0 source), octave_base_value::map_value() now
returns an octave_map instead of an Octave_map; this change dates
from Octave API version 40 onward. This patch makes the necessary
changes to the SWIG runtime while remaining backward-compatible.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12673 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Uses Octave's indentation functions to make sure the classes are
printed at the correct indentation level, e.g. for a cell array
containing SWIG-wrapped classes.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12672 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Fix crashing bug when compiling with MSVC.
Fix print of packed type of void*.
Have namespaces always invoke members as statics/globals.
Make SWIG_init_user function static.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10427 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Use SWIGRUNTIME instead of anonymous namespace to allow for correct linkage when using external runtime. Fixes infinite-recursion bug when calling director method of class whose base is in another module (since the common Director base gets a different typename in each module, per anonymous namespace).
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10376 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Add some support for autodoc feature, so otherwise undocumented functions at least get prototype.
Fix bug in argument number check.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@10341 626c5289-ae23-0410-ae9c-e8d60b6d4f22