SWIG has always marshalled the null matrix into a NULL pointer; this remains
and now we have consistency in representing a NULL pointer.
This is a pre-requisite for a pending commit to fully support std::unique_ptr.
- The {DECLARE|DEFINE}_OV_TYPEID_FUNCTIONS_AND_DATA declarations
attached to this class cause a seg-fault in the module_load
Octave example. Removing these declarations fixes the seg-fault.
- While cause of seg-fault is unknown, note that (in Octave 5.1.0)
the declaration of octave_function, which is the base class for
octave_swig_bound_func, does not use these declarations. So it's
possible they simply are not required for this type of subclass.
The type long may be 4 bytes but swig_this() must return the address of
the object as an integer. Using size_t ensures that the return type can
store a pointer.
With octave 4.4 the function
virtual bool octave_base_value::is_object() const
was renamed to
virtual bool octave_base_value::isobject() const
As noted in CHANGES "2012-03-26: xavier98", is_object() must return true
for swig types whereas octave_base_value::is_object returns false per
default.
- See Examples/octave/callback/runme.m: a.run() calls Octave callback,
but due to changes in behaviour to subsref() a.Callback.run() can no
longer be used to call C callback unless a.Callback actually exists;
subsrefs() just gets the "Callback" call whereas prior to Octave 4.4
it would get both the "Callback" and "run" calls. So now a.Callback is
set to the original base class (with own=0) so that it can be accessed
- .travis.yml:
- ppa:kwwette/octaves has Octave version 4.2, also run C++11 tests
- configure.ac:
- prefer Octave program "octave-cli" to "octave"
- extract any -std=* flags from CXX, add to OCTAVE_CXXFLAGS
- Lib/typemaps/fragments.swg:
- SWIG_isfinite_func(): extern "C++" is required as this fragment can
end up inside an extern "C" { } block
- Lib/octave:
- add std_wstring.i (copied from std_string.i) for C++11 tests
- Lib/octave/octrun.swg:
- move Octave version-checking macros to octruntime.swg
- Octave single()/double() functions now call .as_single()/.as_double()
methods; redirect calls to __float__() method as per .scalar_value()
- << and >> operators are no longer supported by Octave
- Lib/octave/octruntime.swg:
- move Octave version-checking macros here for conditional #includes
- #include interpreter.h instead of #toplev.h
- #include call-stack.h (now needed for octave_call_stack)
- unwind_protect is now in octave:: namespace
- error_state and warning_state are deprecated; use try/catch to catch
errors in feval() instead
- always set octave_exit = ::_Exit, to try to prevent segfault on exit
- Lib/octave/octopers.swg:
- << and >> operators are no longer supported by Octave
- Lib/octave/exception.i:
- Add macro SWIG_RETHROW_OCTAVE_EXCEPTIONS which rethrows any
exceptions raised by Octave >= 4.2
- Examples/test-suite/exception_order.i:
- Use macro SWIG_RETHROW_OCTAVE_EXCEPTIONS to rethrow exceptions
raised by error() function in Octave >= 4.2
- Update Doc/Manual/Octave.html and CHANGES.current
- 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