Commit graph

22,679 commits

Author SHA1 Message Date
Ian Lance Taylor
70d530adfc swig -go: treat a nil argument as NULL
Let Go code pass "nil" when calling a C++ function that accepts a
pointer to a class.  The Go "nil" will be treated as a C++ "nullptr".

Fixes #2203
2022-03-08 15:15:05 -08:00
Ian Lance Taylor
7ebe5cead3 Go docs: add note on thread local storage
Fixes #374
2022-03-08 14:18:59 -08:00
Olly Betts
f8a766295c Handle ) in command line interface filename
SWIG now handles an interface filename specified on the command line
which contains a closing parenthesis `)`, and more generally with
attributes to `%include` and `%import` which are quoted and contain
parentheses.

Fixes #1006
2022-03-08 18:15:18 +13:00
Olly Betts
663299281e [Tcl] Fix SWIG_AsWCharPtrAndSize() to assign result
Fix SWIG_AsWCharPtrAndSize() to actually assign to result variable.  It
looks like SWIG/Tcl wide character handling is currently fundamentally
broken except on systems which use wide characters as the system
encoding, but this should fix wrapping functions which take a wide
string as a parameter on Microsoft Windows.

Patch from Omar Medina.

Fixes https://sourceforge.net/p/swig/bugs/1290/
2022-03-08 08:10:46 +13:00
Ian Lance Taylor
a4c82052ce swig -go: free correct variable in char *& typemap 2022-03-06 21:58:13 -08:00
Olly Betts
f137840aa9 Clarify name used for matching out typemaps
Based on a patch from Dustin J. Mitchell in
https://sourceforge.net/p/swig/bugs/915/
2022-03-07 17:40:25 +13:00
Olly Betts
e5996be10c [Python] Fix memory leak.
SWIG python objects were being freed after the corresponding SWIG
module information was destroyed in Python 3, causing leaks when as
a result the object destructor could not be invoked. To prevent this
misordering, SWIG python objects now obtain a reference to the
Python capsule wrapping the module information, so that the module
information is correctly destroyed after all SWIG python objects
have been freed (and corresponding destructors invoked).

Fixes #2154
Fixes #2208
2022-03-07 14:29:17 +13:00
Andrew Rogers
f822bbf382 Fix PCRE2 macro used in AppVeyor testing. 2022-03-07 14:28:53 +13:00
Olly Betts
d7625ee6b2 Fix fatal error implemented by assert
Calling assert() on a condition that's always false is not an
appropriate way to exit after emitting "Fatal error [...]" because
if NDEBUG is defined the assert() becomes a no-op and the error
stops actually being fatal.
2022-03-07 14:24:48 +13:00
Olly Betts
46bdb1bb29 Add/update docs for Malloc(), Exit(), etc
See #2223
2022-03-07 14:24:48 +13:00
Olly Betts
8dbcd710ff [Javascript] Fix handling of functions which take void*
Fixes #682
2022-03-07 14:17:52 +13:00
Olly Betts
314df0f71e Fix rename_camel testcase to work for Go 2022-03-07 12:36:37 +13:00
Olly Betts
70553f01dc Stop suggesting %name in Guile.html
%name has been deprecated since 2004.
2022-03-07 10:31:52 +13:00
Olly Betts
4f5613b4e9 Reenable rename_camel testcase
It was on the "broken" list, but it should now work.
2022-03-07 09:22:13 +13:00
Olly Betts
cf7bdcf2df Fix and expand rename_camel.i testcase
The regex pattern to upper-case things containing an `i` had incorrect
escaping (`\\(`...`\\)` instead of `(`...`)`) so `import` didn't get
renamed.

This wasn't detected because there were no `_runme` files for this
testcase, so add rename_camel_runme.php which uses reflection to check
the wrapped PHP classes, functions and constants are all named as
expected.

Also expand coverage of converting to underscore case and add coverage
for converting to lower-camel-case.

Related to #1041.
2022-03-07 09:11:50 +13:00
Olly Betts
e1bb265bf7 Remove redundant conditional
clang defines __GNUC__ and __GNUC_MINOR__ as if it were GCC 4.2.1
and has since clang 2.4, which was before __has_builtin() was added.

Closes #1239
2022-03-07 09:11:50 +13:00
Kris Thielemans
bb36862872
add doc on %attribute and templates (#2224)
Document behaviour found in #2142
2022-03-07 06:34:26 +13:00
Ian Lance Taylor
27bdbc1f05 swig -go: treat non-const references as pointers
Also clean up the handling of int* and int& to convert between the C
type int and the Go type int, which are often different sizes.

Fixes #2210
2022-03-05 21:57:36 -08:00
Ian Lance Taylor
4499422308 swig -go: fail test if "go build" fails 2022-03-05 21:54:48 -08:00
Olly Betts
747a51f095 Try to prevent direct use of exit(), malloc(), etc
Use `#pragma GCC poison` (supported since GCC 3, maybe earlier) when
compiling with GCC to help prevent direct uses being introduced for
functions which DOH provides a wrapper for.
2022-03-06 15:36:42 +13:00
Olly Betts
6d29260a1a Eliminate C++11 from constant_expr test
This was introduced by a recent commit adding a testcase matching
an example in the manual.  There doesn't seem to be a suitable
termplate in the standard library before C++11, so instead use
a dummy version of std::array defined in the testcase.
2022-03-06 14:21:12 +13:00
Olly Betts
735732d721 Eliminate calls to abort()
Call Exit(EXIT_FAILURE) instead so that output files get removed.
2022-03-06 14:21:06 +13:00
Olly Betts
55377bdc08 Add DOH Exit() and SetExitHandler()
Exit() is a wrapper for exit() by default, but SetExitHandler() allows
specifying a function to call instead.

This means that failures within DOH (e.g. Malloc() failing due to lack
of memory) will now perform cleanup such as removing output files.

This commit also cleans up exit statuses so SWIG should now reliably
exit with status 0 if the run was successful and status 1 if there was
an error (or a warning and -Werror was in effect).

Previously in some situations SWIG would try to exit with the status set
to the number of errors encountered, but that's problematic - for
example if there were 256 errors this would result in exit status 0 on
most platforms.  Also some error statuses have special meanings e.g.
those defined by <sysexits.h>.

Also SWIG/Javascript tried to exit with status -1 in a few places (which
typically results in exit status 255).
2022-03-06 12:33:54 +13:00
Olly Betts
7bdef23304 Fix incorrect expected output in new testcase 2022-03-06 12:13:51 +13:00
Olly Betts
8cd2cfa9d1 Improve the change to allow parsing 9%a
If there was a later syntax error, this could incorrectly get
reported as:

Error: Unknown directive '%a'.
2022-03-04 17:00:20 +13:00
Olly Betts
8f54f6180a Update docs for expression parsing improvements 2022-03-04 16:36:04 +13:00
Olly Betts
713438e879 Fix GCC -Wunused warning in generated Tcl wrappers 2022-03-04 12:00:36 +13:00
Olly Betts
e38847f7e1 Fail cleanly on allocation failures
Previously code in the SWIG tool didn't handle allocation failures
well.  Most places didn't check for NULL return from
malloc()/realloc()/calloc() at all, typically resulting in undefined
behaviour, and some places used assert() to check for a NULL return
(which is a misuse of assert() and such checks disappear if built with
NDEBUG defined leaving us back with undefined behaviour).

All C allocations are now done via wrapper functions (Malloc(),
Realloc() and Calloc()) which emit and error and exit with non-zero
status on failure, so a non-NULL return can be relied upon.

Fixes #1901.
2022-03-04 11:47:49 +13:00
Olly Betts
9eb75a0c07 Improve typemap method and attribute checking
Specifying a value on the typemap method now gives an error, e.g.:

%typemap(argout=123) char * ""

The old way of specifying a language name in the typemap attributes
is no longer supported (it has been deprecated for 16 years).

Closes #891
2022-03-03 18:46:15 +13:00
Julien Schueller
3ffbe29f52
Python: avoid unused SwigMethods_proxydocs var (#2222)
Avoids a warning since 3aa302c08f
2022-03-03 18:12:21 +13:00
Olly Betts
5755f399a2 Eliminate some temporary buffers 2022-03-03 12:27:04 +13:00
Olly Betts
b5dbcb4ece Rename free variable to jsfree
The collision with free() is a latent problem.
2022-03-03 12:23:41 +13:00
William S Fulton
5682d940e5 HTML fixes 2022-03-02 19:42:44 +00:00
William S Fulton
3159de3e9f Add support for Python variable annotations as a feature.
Both function annotations and variable annotations are turned on using the
"python:annotations" feature. Example:

  %feature("python:annotations", "c");

  struct V {
    float val;
  };

The generated code contains a variable annotation containing the C float type:

  class V(object):
      val: "float" = property(_example.V_val_get, _example.V_val_set)
      ...

Python 3.5 and earlier do not support variable annotations, so variable
annotations can be turned off with a "python:annotations:novar" feature flag.
Example turning on function annotations but not variable annotations globally:

  %feature("python:annotations", "c");
  %feature("python:annotations:novar");

or via the command line:

  -features python:annotations=c,python:annotations:novar

Closes #1951
2022-03-02 19:33:03 +00:00
sethg
0ba26d8f73 Add property annotations 2022-03-02 07:44:04 +00:00
William S Fulton
5a945bb135 More docs on -fastproxy and annotations 2022-03-02 07:44:04 +00:00
Olly Betts
3984321c44 Remove debug Printf accidentally left in previous commit 2022-03-02 16:08:22 +13:00
Olly Betts
aa24e6b22b Handle typemap argument without a value
This now gives an error, previously SWIG segfaulted.

Fixes #891
2022-03-02 15:56:43 +13:00
Olly Betts
735fe4b60a Filter out is_python_* in PHP tests
These functions are added in a number of testcases but for all
languages not just Python.  It's tedious having to update the
PHP expected function lists for them, so let's just filter them
out.
2022-03-02 12:20:57 +13:00
William S Fulton
064b8148ea Correct WARN_JAVA_TYPEMAP_INTERFACEMODIFIERS_UNDEF warning number 2022-03-01 23:10:25 +00:00
William S Fulton
bc68a9b034 Document limitations with Python annotations
[skip ci]
2022-02-28 19:58:21 +00:00
William S Fulton
afc915f490 Turn on Python annotations testing again
Testing is skipped where there is no support for it, that is,
using -builtin or -fastproxy. How to add this support in needs
determining, it's not clear how to do so.
2022-02-28 19:40:35 +00:00
William S Fulton
8ce010b915 Disable Python annotations test due to incomplete support 2022-02-27 18:39:31 +00:00
William S Fulton
2072ae19c9 Python function annotations removed from -py3 option.
Python function annotations containing C/C++ types are no longer
generated when using the -py3 option. Function annotations support
has been moved to a feature to provide finer grained control.
It can be turned on globally by adding:

  %feature("python:annotations", "c");

or by using the command line argument:

  -features python:annotations=c

The implementation is designed to be expandable to support different
annotations implementations. Future implementations could implement
something like the following for generating pure Python types:

  %feature("python:annotations", "python");

or typing module types to conform to PEP-484:

  %feature("python:annotations", "typing");

Closes #1561
Issue #735
2022-02-27 10:47:50 +00:00
Olly Betts
bf382f01b4 Update _runme.php for new testcase functions and globals 2022-02-27 18:27:58 +13:00
Olly Betts
b127e11f1e Fix typos in docs and comments 2022-02-27 18:15:46 +13:00
Olly Betts
b5544a1812 Remove commented out redundant code
This was an alternate version without NULL checks on free() and
delete, but we removed those checks globally in
7ec2f89fe2 so now it's just the
same as the active code.
2022-02-27 18:15:46 +13:00
Seth R Johnson
f4e2a4feee Fix warning and improve description of ignore_parameter test
See https://github.com/swig/swig/pull/2205#issuecomment-1052648190
2022-02-27 18:15:39 +13:00
William S Fulton
136692d2b0 changes file tweak 2022-02-26 21:11:58 +00:00
William S Fulton
622fa2818b GHA: normalize amount of Scilab testing
We limit target language to one version for c++11 and c++14 testing
2022-02-26 21:09:30 +00:00