| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously we had a hard-coded list of allowed combinations in the
grammar, but this suffers from combinatorial explosion, and results
in a vague `Syntax error in input` error for invalid (and missing)
combinations.
This means we now support a number of cases which are valid C++
but weren't supported.
Fixes #302
Fixes #2079 (friend constexpr)
Fixes #2474 (virtual explicit)
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
We now wrap this as a non-static method in PHP, which means the static
form only callable via an object.
Previously this case could end up wrapped as static or non-static
in PHP. If it was wrapped as static, attempting to call non-static
overloaded forms would crash with a segmentation fault.
See #2544
|
|
|
|
|
| |
The bulk of this was already removed in
e3b112c69ceed5c39cb07fa45a3ba62b27712679.
|
|
|
|
|
| |
PHP7 security support ended 2022-11-28 so it doesn't make sense to
include support for it in the SWIG 4.2.x release series.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Look up unknown base classes using SWIG_MangledTypeQueryModule().
Revert to using SWIG_TypeCheck() instead of SWIG_TypeCheckStruct()
as the latter doesn't seem to work for this case (at least for PHP
right now).
Add mod_runme.php as a regression test for this.
Adjust the PHP test harness not to set up reflection for the module
unless it's actually needed for a testcase. Currently the approach
to find the module name doesn't work for multi-module testcases.
See #2126
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add Swig_obligatory_macros which must be called by each
target language to define SWIG_VERSION correctly
in the generated code, as well as the language specific
macro SWIGXXX where XXX is the target language name.
Drop the #ifdef SWIGXXX that was previously generated -
I can't see the point of this and if users are defining
this macro somehow, then users will need to change this
Closes #1050
|
| |
|
|
|
|
| |
See #2151
|
| |
|
|
|
|
|
|
|
| |
This follows PHP 8.2 deprecating dynamic features.
The new feature also provides a clean way to fix the remaining PHP
test case failure under PHP 8.2.
|
|
|
|
|
|
|
|
| |
In PHP 8.2 zend_operators.h contains inline code which triggers this
warning and our testsuite uses with option and -Werror.
I don't see a good way to only do this within our testsuite, but
disabling it globally like this shouldn't be problematic.
|
|
|
|
|
| |
We need to include php.h before stdio.h (and probably before most
other libc headers).
|
|
|
|
|
| |
The required return type has changed from int to an enum, which
gives a compiler warning when we assign a function pointer.
|
|
|
|
|
| |
We were incorrectly considering them as methods of the class they
are a friend of for the purposes of calculate PHP type declarations.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Under %feature("php:type", "compat") we don't generate return type
declaration for virtual methods if directors are enabled for that class.
However if a base class of the class has a method of the same name which
isn't directed this was still getting a return type declaration which
caused PHP to give an error when it tried to load the module.
Now we detect this situation and suppress the base class method's
return type declaration too.
Re-enable testcase director_redefined which now works again (it was
failing under PHP8 due to this issue).
See #2151
|
|
|
|
|
| |
Another step in preparation for a fix for the incompatible overridden
method problem discussed in #2151.
|
|
|
|
|
| |
It's more natural to leave it where it was, and will work better
when we delay the arginfo generation.
|
|
|
|
|
|
|
|
| |
Encapsulate the code to generate arginfo in the PHPTypes class.
By itself this should result in no functional changes, but it's
a step towards being able to delay arginfo generation which I
think is necessary to address the incompatible overridden
method problem discussed in #2151.
|
|
|
|
| |
This is no longer used since we changed how classes are wrapped.
|
|
|
|
|
|
| |
Highlighted by clang-15 warnings such as:
warning: variable 'index' set but not used [-Wunused-but-set-variable]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If the same method name is implemented in a parent class then the
subclass can't have more required parameters than that or else we
get a compatibility error when the module is loaded.
The testsuite wasn't catching this problem because it was no longer
trying to load the modules for testcases without _runme.php, because
the mechanism to do that relied on there being a generated .php
wrapper, which we no longer have by default. Fix that to provide a
regression test for this fix.
See #2151
|
|
|
|
|
|
|
| |
In some cases of overloaded functions the parameter type information was
missing for some or all parameters.
See #2151
|
|
|
|
|
|
|
|
|
|
| |
Otherwise can end up with a second PHP exception if the directorout
typemap doesn't accept PHP Null. `SWIG_fail` in this case results
in us returning to PHP which then propagates the pending exception.
This commit fixes a failure in smoketest.php in Xapian's PHP bindings,
but I've not managed to come up with a reproducer which works for
SWIG's testsuite.
|
|
|
|
|
|
|
| |
Ensure PHP parameter type declarations are compatible with those for
the same method in any classes we inherit from.
See #2151
|
|
|
|
|
|
|
|
| |
I missed that this change breaks cpp_static, which seems to be to do
with handling the combined getter and setter we emit for static
member variables. Reverting while I figure out how to handle that.
This reverts commit a277748870199ccdc63b852369fcd07625bf0c20.
|
|
|
|
|
|
|
| |
Ensure PHP parameter type declarations are compatible with those for
the same method in any classes we inherit from.
See #2151
|
|
|
|
| |
It's actually tracking pointer types which aren't wrapped as classes.
|
|
|
|
|
| |
Use zend_strpprintf() which handles this more cleanly without risk of
buffer overflow and without a fixed length limit.
|
| |
|
|
|
|
|
| |
Fix Visual C++ warning in scilab.cxx:
warning C4996: 'strtok': This function or variable may be unsafe.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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).
|
|
|
|
|
|
|
| |
Fix to call cleanup code in exception situations and not to invoke
the freearg typemap twice in certain situations.
Fixes https://sourceforge.net/p/swig/bugs/1211/
|
| |
|
|
|
|
|
| |
This resolves an issue uncovered by adding a _runme.php for testcase
director_alternating.
|
| |
|
|
|
|
| |
See #2151
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since the switch to wrapping classes using PHP's C API, we now
internally need to be able to tell if a PHP object is of or derived
from a class that is wrapped by SWIG so we know if we can offset the
zend_object pointer to get to the swig_object_wrapper. If we try to
do this to an object which isn't wrapped by SWIG then we invoke C/C++
undefined behaviour (and typically get a segmentation fault).
This check is implemented by having a SWIG\wrapped empty interface which
we make all SWIG-wrapped classes implement simply so we can test for it
to detect such classes.
Fixes #2125
|
|
|
|
|
| |
We now automatically generate PHP type declarations for PHP >= 8.0.
The generated code still compiles with PHP 7.x but without type declarations.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Previously the zend_class_entry for Foo was named SWIGTYPE_Foo_ce, but
this can collide in some cases - e.g. if there's a class named p_Foo
then its zend_class entry will be SWIGTYPE_p_Foo_ce, but that's the same
as the swig_type_info for a class named p_Foo_ce.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Do more initialisation at module load time.
Use a shared set of handlers for cases when the C/C++ object is
destroyed with free().
Most of the code in the free_obj and create_object handlers is the
same for every wrapped class so factor that out into common functions.
|
| |
|
|
|
|
|
| |
We shouldn't be using symbols starting `php` as that risks collisions
with future symbols defined by PHP.
|
| |
|