Commit graph

22,705 commits

Author SHA1 Message Date
William S Fulton
3ab288dfa4 Different capsule names for builtin changes entry 2022-03-26 15:06:13 +00:00
Eugene Toder
f733efd3c0 Use different capsule names with and without -builtin
Types generated with and without -builtin are not compatible. Mixing
them in a common type list leads to crashes. Avoid this by using
different capsule names: "type_pointer_capsule" without -builtin and
"type_pointer_capsule_builtin" with.

See #1684
2022-03-18 13:44:54 -04:00
Ian Lance Taylor
b819363117 [Go] Don't convert arrays to pointers if there is a "gotype" typemap entry.
Fixes #749
2022-03-15 12:18:47 -07:00
Ian Lance Taylor
46aaf11b01 [Go] Add documentation note about Go and C++ exceptions.
For #418
Fixes #518
2022-03-15 09:48:53 -07:00
Ian Lance Taylor
56b539e0e0 [Go] Add notes about recent Go-related changes. 2022-03-15 09:48:18 -07:00
William S Fulton
dea0c3f0b2 Add some code comments about Python objects and capsule reference counting
Issue #2208
2022-03-15 08:46:20 +00:00
William S Fulton
ae8aa4e08f Re-enable overloading test for php8 2022-03-15 08:32:27 +00:00
Olly Betts
f5313e63af [ci] Adjust how CPPFLAGS is set
Set it so it should be visible where the CI log shows the environment,
as `make` is run with `-s` so the compile command lines are unhelpfully
not shown.
2022-03-15 18:17:18 +13:00
Olly Betts
936e9264e8 Adjust Python variables example for Python 2
Explicitly call str() as previously Python 2 seemed to end up calling
repr().
2022-03-15 18:11:34 +13:00
YungLee
31f7b437f4
[scilab] Fix to work on Windows
* Change the builder filename to match the loader filename

* Mark extern functions with SWIGEXPORT

* Fix bug: builder.sce not generated if with  '-scilab -builder'  option

Fixes #1853
2022-03-15 15:06:17 +13:00
Olly Betts
9efcc785ae Re-enable symbol poisoning in a CI job
It seems too brittle to enable by default as we'd have to avoid
including any system headers after doh.h, which is hard to enforce,
but just having it enabled for one CI job should avoid uses of the
poisoned symbols from being accidentally introduced.

See #2223
2022-03-15 11:14:23 +13:00
Olly Betts
250afd6dc3 List variables in variables example
Seems useful in itself, but also serves to check if
https://sourceforge.net/p/swig/bugs/976/ is still reproducible.
2022-03-15 11:06:20 +13:00
Olly Betts
b4a92ae34f Fix SWIG_Py*Method_New conditional
This should be a SWIG-time conditional, but was inside %{ %} so was
instead a compile-time conditional.

Fix for bug in the changes in #2191
2022-03-14 12:49:41 +13:00
William S Fulton
598736a6b2 %interface family of macros no longer add variable wrappers
The getter/setter methods used for wrapping methods are no longer
added to the interface class.

Closes #1524

Also add in testcase for enums.
2022-03-12 23:04:24 +00:00
William S Fulton
63bbf642f4 %interface family of macros enum fix for Java
enums were being generated into the interface class instead of the proxy
class.
2022-03-12 23:04:24 +00:00
William S Fulton
a87e722834 Use GetFlag instead of Getattr for feature:interface 2022-03-12 23:04:24 +00:00
William S Fulton
b6ece11fc1 Fixes for the family of %interface macros for overloaded methods
When C++ methods are not able to be overloaded in a derived class,
such as when they differ by just const, or the target language
parameters types are identical even when the C++ parameter types
are different, SWIG will ignore one of the overloaded methods with
a warning. A %ignore is required to explicitly ignore one of the
overloaded methods to avoid the warning message. Methods added
in the derived classes due to one of the %interface macros are now
similarly ignored/not added to the derived class.

The adding of additional methods into the parse tree is now more
robust and complete resulting in support for %feature and %rename
for the added methods.

Closes #1277
2022-03-12 23:04:24 +00:00
William S Fulton
77853770bd Disable use of gcc poison pragmas
Needs a rethink to avoid use of poisoned macros in system headers.
I see this on Ubuntu 16.04:

gcc -DHAVE_CONFIG_H   -I../Source/Include -I../Source/CParse
-I../Source/Include -I../Source/DOH -I../Source/CParse
-I../Source/Doxygen -I../Source/Preprocessor -I../Source/Swig
-I../Source/Modules   -g -O2 -Wall -W -pedantic -MT DOH/base.o -MD -MP
-MF $depbase.Tpo -c -o DOH/base.o DOH/base.c &&\
mv -f $depbase.Tpo $depbase.Po
In file included from /usr/include/string.h:630:0,
                 from DOH/dohint.h:21,
                 from DOH/base.c:15:
/usr/include/x86_64-linux-gnu/bits/string2.h:1282:19: error: attempt to
use poisoned "calloc"
        ? (char *) calloc ((size_t) 1, (size_t) 1)        \
                   ^
/usr/include/x86_64-linux-gnu/bits/string2.h:1284:32: error: attempt to
use poisoned "malloc"
      char *__retval = (char *) malloc (__len);       \
                                ^
/usr/include/x86_64-linux-gnu/bits/string2.h:1302:19: error: attempt to
use poisoned "calloc"
        ? (char *) calloc ((size_t) 1, (size_t) 1)        \
                   ^
/usr/include/x86_64-linux-gnu/bits/string2.h:1308:26: error: attempt to
use poisoned "malloc"
      __retval = (char *) malloc (__len);        \
                          ^
2022-03-12 23:04:24 +00:00
William S Fulton
3bf728f038 HTML fixes 2022-03-12 23:04:24 +00:00
William S Fulton
50518d4e77 Using declarations, directors and overloaded methods
Language::unrollVirtualMethods was assuming that the using
declaration would only introduce one method. Fix this by adding
in all the overloaded methods from a base class.

Affects code generation in C# and Java, but I was not able
to construct a test that failed before this commit.
2022-03-10 22:18:23 +00:00
William S Fulton
8a8532d823 Refactor code out of Language::unrollVirtualMethods
Move code in main loop into new function to handle one method at a time.
In preparation for next commit for using declaration fix.
Remove unused default_director variable.
2022-03-10 22:18:23 +00:00
William S Fulton
fe27e3d2ba Language::unrollVirtualMethods variable initialisation refactor 2022-03-10 22:18:23 +00:00
William S Fulton
e53f51b89d Add missing symtab for functions added by using declarations
Fixes fully qualified names for functions added by using declarations:
- Error messages show fully qualified names in Lua
- Overload warning messages show fully qualified names
- Error messages calling dispatch functions for handling overloaded methods in OCaml, Python and Tcl
2022-03-10 22:18:23 +00:00
William S Fulton
c88a9436bc Fix segfault in C# layer handling using declarations
Segfault was actually avoided in previous commit ab23cb29.
This commit makes handling more robust in the event of
using %ignore just on the derived method, not tested as it is not
what one should do with directors, and possibly other cases.

Go still segfaults with the new testcase director_using_member_scopes.i.

Issue #1441.
2022-03-10 22:18:23 +00:00
William S Fulton
bd5ffe86e4 Using declarations in derived class parameters scoping fix
Fix using declaration in derived class incorrectly introducing a method
from a base class when the using declaration is declared before the method
declaration. Problem occurred when within a namespace and the parameter types
in the method signatures were not fully qualified.

Issue #1441
2022-03-10 22:18:23 +00:00
Olly Betts
2a9431ebfb Remove confusing extra parameter from doc example
The initial prototype shown in these examples has a `len` parameter
but that the rest of the example is as if that parameter isn't there
so remove it from the initial prototype.

Fixes https://sourceforge.net/p/swig/bugs/1289/
2022-03-09 15:05:44 +13:00
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