Commit graph

75 commits

Author SHA1 Message Date
William S Fulton
ca9eebcb8d Octave - SWIG now marshalls a C/C++ NULL pointer into the null matrix, []
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.
2022-08-31 19:40:13 +01:00
William S Fulton
2ccc9bd060 Add Octave support for std::unique_ptr and std::auto_ptr
Equivalent to Ruby/Python implementations.
2022-08-02 00:00:54 +01:00
Markus Friedrich
a5774a9d0f Fixed octave version check and enabled VPATH build for check-octave-operator example 2022-01-16 09:58:25 +01:00
Markus Friedrich
be0b975e6b Merge remote-tracking branch 'origin/master' into HEAD 2022-01-16 09:57:22 +01:00
Robert Fries
983b91694f Additional changes due to name changes in octave-6 * is_map to isstruct, is_object to isobject 2021-12-05 22:19:46 +00:00
Robert Fries
81f9e6600f Octave module lets examples and tests work with Octave-6 * Try-catch replacement for check of error_state * Add execute method in addition to call * Replace oct_mach_info with octave::mach_info * Call from interpreter: global_varval global_assign * Assign a global name requires locating the stack which requires interpreter to tree evaluator to callStack * Do not use discard_error_messages or discard_warning_messages 2021-12-05 22:19:46 +00:00
Robert Fries
852eab7db3 Allow swig wrapped modules to compile with -Bsymbolic 2021-12-05 22:19:40 +00:00
Karl Wette
d73ef20475 octrun.swg: ensure type_id() is set correctly 2020-05-31 22:11:51 +10:00
Karl Wette
d11e29615d Octave: use pre-compiled headers to speed up test suite, if supported 2020-05-31 22:11:51 +10:00
Karl Wette
30132bf777 octrun.swg: remove octave_value type-id from octave_swig_bound_func
- 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.
2020-05-31 06:43:15 +10:00
Markus Friedrich
a2d9a24f4d Changed return type of swig_this() to size_t.
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.
2019-12-24 14:06:25 +01:00
Markus Friedrich
f0bb77221a Bugfix for octave 4.4
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.
2019-11-24 14:55:36 +01:00
Orion Poplawski
c38b7de6a1 Fix format-security error with octave 5.1 2019-03-10 11:47:27 -06:00
William S Fulton
e354ba8cdc Fix overloading for non-pointers and NULL - Octave 2018-12-30 11:25:41 +00:00
Karl Wette
6586616e23 Lib/octave: fix getting/setting global variables for Octave >= 4.4 2018-05-12 22:25:07 +10:00
Karl Wette
d0b1105f30 Lib/octave: use new class for function member dereference with Octave >= 4.4 2018-05-12 22:25:07 +10:00
Karl Wette
94e8853e61 Lib/octave: fix operator installation for Octave >= 4.4 2018-05-12 22:25:07 +10:00
Karl Wette
84aab22f66 Lib/Octave: in Octave >= 4.4, assign reference to base class in subclass
- 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
2018-05-12 22:25:07 +10:00
Karl Wette
6f0561eb57 Lib/octave: replace is_numeric_type() with isnumeric() for Octave >= 4.4 2018-05-12 22:25:07 +10:00
Karl Wette
358345db9e Lib/octave: replace is_cell() with iscell() for Octave >= 4.4 2018-05-12 22:25:07 +10:00
Karl Wette
e24ec40895 Octave: add support for version 4.2
- .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
2017-01-22 11:53:12 +13:00
Karl Wette
125329466d octave: map unary functions to __...___ Python-style unary members
- Only available in Octave 3.8.0 and higher
2016-02-07 20:22:39 +01:00
Karl Wette
000ab753df octave: recognize Python __float__ numeric conversion operator 2016-02-07 20:22:39 +01:00
Karl Wette
697a1b7c9d octrun.swg: simplify unary operator calls in dims() and string_value() 2016-02-07 20:22:39 +01:00
Karl Wette
0dd16f92ab octrun.swg: make dispatch_[unary|binary|index]_op() const-qualified 2016-02-07 20:22:39 +01:00
William S Fulton
ab8f05204f Cosmetic changes in Octave runtime
Fix bracket matching!
2015-08-31 12:44:13 +01:00
Orion Poplawski
350c410d4b Update print() signature for octave 4.0 2015-07-09 19:20:46 -06:00
Orion Poplawski
248890aad0 Support for octave 4.0.0 2015-07-08 13:26:36 -06:00
Jeremy
e301457a43 Attempting fixes for Octave shared_ptr support 2015-01-05 10:53:06 -05:00
William S Fulton
23373e9ffd Revert "Octave: cleanup/restructure library files"
This reverts commit bf12d76d03.

Reverting a series of Octave commits for re-applying again without
incorrect whitespace changes.
2014-10-09 19:34:02 +01:00
Karl Wette
bf12d76d03 Octave: cleanup/restructure library files
- 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
2014-10-04 19:18:32 +02:00
William S Fulton
4ba4a02e93 Fix unused method warning in Octave 2014-02-15 18:36:01 +00:00
Karl Wette
5b167cc12d octave: update support to Octave version 3.8.0 2014-01-13 18:24:17 +13:00
Karl Wette
d72e3dd899 Octave: add SWIGRUNTIMEINLINE to SWIG_Octave_SetConstant() 2013-06-13 17:46:47 +02:00
Karl Wette
ef160ec072 Octave: remove allocation of new octave_value in SWIG_Octave_SetGlobalValue()
- 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
2013-05-12 17:32:08 +01:00
Karl Wette
f76d63419f [octave] Declare these functions only if directors are used
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13108 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-05-23 09:32:51 +00:00
Karl Wette
bc2a78fbab New Octave module loading behaviour
- 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
2012-05-14 09:24:15 +00:00
Karl Wette
4f11aaa849 Declare Octave public wrapping functions with DEFUNX_DLD
- 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
2012-05-14 09:24:00 +00:00
Karl Wette
bf0fe83462 New functions for handling Octave global variables
- Creates a copy of the variable to be assigned to the
  symbol table, so it can be safely deallocated on exit

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13086 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-05-14 09:23:45 +00:00
Karl Wette
a0dbe43c73 Move Octave SWIG runtime functions to Lib/octave/octruntime.swg
- Add documentation strings for runtime functions

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13085 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-05-14 09:23:33 +00:00
Karl Wette
de49578c31 Move Octave director-related code into Lib/octave/director.swg
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13084 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-05-14 09:23:20 +00:00
Karl Wette
35b2270f84 Make octave_dim tests pass for octave version != 3.2.4
- see SourceForge #3516652

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12995 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-04-15 22:47:38 +00:00
Xavier Delacour
b0ea5581c3 add extra logic to the octave_swig_type::dims(void) method: it checks if the user has defined a __dims__ method and uses this in stead of returning (1,1) (patch from jgillis, sf 3425993)
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12955 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-03-26 15:45:02 +00:00
Xavier Delacour
d29e751cce make is_object return true for swig types (patch from jgillis, sf 3424833)
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12954 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-03-26 15:38:10 +00:00
Xavier Delacour
1878eb4890 Comment declaration of unimplemented function swig_register_director (from Karl Wette)
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12909 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-02-27 17:07:44 +00:00
Xavier Delacour
2f68aa0a34 Added example of friend operator use to Examples/octave/operator, fixed minor bug that causes a panic in octave 3.0.5. Tested examples work for octave 3.0.5, 3.2.4, and 3.4.0. (thanks to Karl Wette)
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12794 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2011-08-31 20:54:11 +00:00
Xavier Delacour
dae9457962 Octave patches for 3.4.0 compatibility, etc. (sf 3387394, thanks for Karl Wette)
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12774 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2011-08-08 21:41:34 +00:00
Xavier Delacour
06221dacae Allow global operators to be SWIG-wrapped functions (by Karl Wette)
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
2011-05-17 02:02:15 +00:00
Xavier Delacour
2d5c4302b0 Adds support for Python __r*__ operators (by Karl Wette)
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
2011-05-17 02:00:25 +00:00
Xavier Delacour
360c1aaa1b Fix an incompatibility with never versions of Octave (by Karl Wette)
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
2011-05-17 01:59:53 +00:00