summaryrefslogtreecommitdiff
path: root/Examples/test-suite
Commit message (Collapse)AuthorAgeFilesLines
* Remove support for PHP7Olly Betts2023-04-143-24/+3
| | | | | 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.
* Merge branch 'bda_standardize_vector_array'William S Fulton2023-03-221-0/+15
|\ | | | | | | | | | | * bda_standardize_vector_array: std_array.i std_vector.i tweaks Lib/csharp: Better standardized std_vector.i and std_array.i
| * std_array.i std_vector.i tweaksWilliam S Fulton2023-03-221-0/+15
| | | | | | | | | | | | | | Efficiency fixes and tidy up from previous commit. Add test case for constructing from differently sized containers. Issue #2478
* | Improved error checking when defining classes and using %template.William S Fulton2023-03-138-39/+45
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. When a template is instantiated via %template and uses the unary scope operator ::, an error occurs if the instantiation is attempted within a namespace that does not enclose the instantiated template. For example, the following will now error as ::test::max is not enclosed within test1: Error: '::test::max' resolves to 'test::max' and was incorrectly instantiated in scope 'test1' instead of within scope 'test'. namespace test1 { %template(maxchar) ::test::max<char>; } 2. SWIG previously failed to always detect a template did not exist when using %template. In particular when instantiating a global template incorrectly within namespace. The code below now correctly emits an error: Error: Template 'test5::GlobalVector' undefined. namespace test5 { } template<typename T> struct GlobalVector {}; %template(GVI) test5::GlobalVector<int>; 3. Also error out if an attempt is made to define a class using the unary scope operator ::. The following is not legal C++ and now results in an error: Error: Using the unary scope operator :: in class definition '::Space2::B' is invalid. namespace Space2 { struct B; } struct ::Space2::B {};
* | Redefined identifer testcase now correctly errorsWilliam S Fulton2023-03-132-3/+5
| |
* | Update errors tests to use new template errorWilliam S Fulton2023-03-092-3/+3
| | | | | | | | | | Old: Error: Template 'X' undefined. New: No matching function template 'X' found.
* | Fix duplicate const in generated code wrapping templatesWilliam S Fulton2023-03-084-1/+51
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix duplicate const in generated code when template instantiation type is const and use of template parameter is also explicitly const, such as: template <typename T> struct Conster { void cccc1(T const& t) {} }; %template(ConsterInt) Conster<const int>; Above previously led to generated code: (arg1)->cccc1((int const const &)*arg2); instead of (arg1)->cccc1((int const &)*arg2);
* | Update partial specialization testWilliam S Fulton2023-03-011-8/+7
| |
* | Partial template specialization fixes to support default argumentsWilliam S Fulton2023-03-014-15/+113
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Default argments come from the primary template's parameter list. Example: template<class Y, class T=int> struct X { void primary() {} }; // Previously the specialization below resulted in: // Error: Inconsistent argument count in template partial specialization. 1 2 template<class YY> struct X<YY*> { void special(YY*) {} }; // Both of these correctly wrap the partially specialized template %template(StringPtr) X<const char *>; %template(ShortPtr) X<short *, int>;
* | Duplicate parameter name handling improvementsWilliam S Fulton2023-02-182-0/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | When a method with duplicate parameter names is wrapped such as: void fn_3parms(int p_a, int p_a, double p_c); Previously all duplicate parameter names were changed in order to provide unique parameter names: void fn_3parms(int arg0, int arg1, double p_c) Now the parameter names changed are just the 2nd and subsequent duplicate parameter names: void fn_3parms(int p_a, int arg1, double p_c)
* | Improved variadic parameter names expansionWilliam S Fulton2023-02-181-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Number the variadic parm names instead of not naming them. Such as: template<typename... T> int variadicmix1(T... t) { return 20; } %template(variadicmix1) variadicmix1<A,B,C>; Used to expand to: int variadicmix1(A T, B arg1, C arg2) now: int variadicmix1(A t1, B t2, C t3) Also test for generating duplicate parameter names which required a fix in R. Also results in a few minor changes to parameter names in generated R code.
* | Make new testcase c++98 compliantWilliam S Fulton2023-02-171-5/+5
| |
* | Template partial specialization improvementsWilliam S Fulton2023-02-172-0/+104
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Closes #1300 Changes to support the first example below (partial specialization of template parameter types like Vect<int>). Previous implementation and design could only handle one template parameter name per template specialization argument, such as Vect<TS> for the first template specialization argument (for first example below) template<class TS, typename TTS> class Foo<Vect<TS>, int> { ... }; and not template<class TS, typename TTS> class Foo<Vect<TS, TTS>, int> { ... }; New approach is to not modify 'templateparms' in the template node, (except to fill in default args from primary template) Previous implementation also assumed a template parameter could not be used more than once in the specialized arguments, such as template<typename T> struct Hey<T, T> { void specialA() {} }; Examples ======== 1) For primary: template<class T, typename TT> class Foo { ... }; and specialization: template<class TS, typename TTS> class Foo<Vect<TS>, TTS> { ... }; Fix specialization template from (wrong) | templateparms - 'Vect< TS >,typename TTS' to (correct/new way) | templateparms - 'class TS,typename TTS' 2) For primary: template<typename P1 = int, typename P2 = double> struct Partialler { void primary(P1, P2) {}; }; and specialization: template<typename S1, typename S2> struct Partialler<S2, S1*> { void special(S1*, S2, bool) {}; }; Specialized template changes from (wrong) | templateparms - 'typename S2=int,typename S1=double' to (correct/new way, default args are removed) | templateparms - 'typename S1,typename S2' and subsequent change to partialargs from | partialargs - "Partialler<($1,p.$2)>" to | partialargs - "Partialler<($2,p.$1)>" so that the $n number is now more logically the nth template parameter in templateparms 3) For primary: template<typename X, typename Y> struct Hey { void primary() {} }; and specialization: template<typename T> struct Hey<T, T> { void specialA() {} }; old (wrong/old way) | templateparms - 'typename T,typename T' new (correct/new way) | templateparms - 'typename T' These are unchanged and are okay: | partialargs - "Hey<($1,$1)>" 4) For primary: enum Hello { hi, hello }; template <Hello, class A> struct C {}; and specialization: template <class A> struct C<hello,A> { ... }; old (wrong/old way) | templateparms - 'hello,class A' new (correct/new way) | templateparms - 'class A' and subsequent changes to partialargs from | partialargs - "C<(hi,$2)>" to | partialargs - "C<(hi,$1)>" Test-suite ========== Identical output as before in Python but in Java, an unimportant change in cpp11_variadic_function_templates.i results in one variadic parameter name being different. New testcase template_partial_specialization_more.i with more testcases added including above examples that are not already in the test-suite.
* | Fix deduction of partially specialized template parametersWilliam S Fulton2023-02-172-24/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | when the specialized parameter is non-trivial, used in a wrapped method and the type to %template uses typedefs. For example: typedef double & DoubleRef; template <typename T> struct XX {}; template <typename T> struct XX<T &> { void fn(T t) {} }; %template(XXD) XX<DoubleRef>; The type of the parameter in the instantiated template for fn is now correctly deduced as double.
* | Rewrite does_parm_match used in template partial specializationWilliam S Fulton2023-02-171-4/+0
| | | | | | | | | | | | Re-implement this function in preparation for fixing bugs in this function. This rewrite should result in no change in the way it previously worked for now.
* | Add missing template_function_parm testcaseWilliam S Fulton2023-02-171-0/+1
|/
* Fix seg fault using %templateWilliam S Fulton2023-01-032-0/+53
| | | | | | | | | Fix seg fault when instantiating templates with parameters that are function parameters containing templates, such as: %template(MyC) C<int(std::vector<int>)>; Closes #983
* Instantiation of C++11 variadic function templatesWilliam S Fulton2023-01-032-2/+36
| | | | | | Complete support for C++11 variadic function templates. Support was previously limited to just one template parameter. Now zero or more template parameters are supported in the %template instantiation.
* Move variadic function template tests to separate testcaseWilliam S Fulton2023-01-033-43/+83
|
* Merge branch 'OCaml-rename_rstrip_encoder-using2-runtime-tests'William S Fulton2022-12-302-0/+11
|\ | | | | | | | | | | * OCaml-rename_rstrip_encoder-using2-runtime-tests: Complete copy of testcase from Python [OCaml] Runtime tests for rename_rstrip_encoder and using2
| * Complete copy of testcase from PythonWilliam S Fulton2022-12-301-1/+3
| |
| * [OCaml] Runtime tests for rename_rstrip_encoder and using2Zackery Spytz2022-12-042-0/+9
| | | | | | | | | | | | | | Add runtime tests for rename_rstrip_encoder and using2. They are based on the runtime tests that already exist for other languages.
* | More variadic template testingWilliam S Fulton2022-12-301-3/+31
| | | | | | | | Test less conventional function ptr parameters
* | Syntax error fixes parsing more elaborate parameter pack argumentsWilliam S Fulton2022-12-301-3/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | that are function pointers and member function pointers. template <typename... V> struct VariadicParms { void ParmsFuncPtrPtr(int (*)(V*...)) {} void ParmsFuncPtrPtrRef(int (*)(V*&...)) {} void ParmsFuncPtrPtrRValueRef(int (*)(V*&&...)) {} void ParmsFuncPtrRef(int (*)(V&...)) {} void ParmsFuncPtrRValueRef(int (*)(V&&...)) {} void ParmsMemFuncPtrPtr(int (KlassMemFuncs::*)(V*...)) {} void ParmsMemFuncPtrPtrRef(int (KlassMemFuncs::*)(V*&...)) {} void ParmsMemFuncPtrPtrRValueRef(int (KlassMemFuncs::*)(V*&&...)) {} void ParmsMemFuncPtrRef(int (KlassMemFuncs::*)(V&...)) {} void ParmsMemFuncPtrRValueRef(int (KlassMemFuncs::*)(V&&...)) {} }; %template(VariadicParms0) VariadicParms<>; %template(VariadicParms1) VariadicParms<A>; Also in various other places such as within noexcept specifiers: template<typename T, typename... Args> void emplace(Args &&... args) noexcept( std::is_nothrow_constructible<T, Args &&...>::value); Issue #1863
* | Fix instantiation of variadic class templatesWilliam S Fulton2022-12-291-2/+33
| | | | | | | | | | | | | | | | | | | | | | containing parameter pack arguments that are function pointers. template <typename... V> struct VariadicParms { void ParmsFuncPtrVal(int (*)(V...)) {} }; %template(VariadicParms0) VariadicParms<>; %template(VariadicParms1) VariadicParms<A>;
* | Fix syntax error parsing variadic template parameter pack argumentsWilliam S Fulton2022-12-231-1/+24
| | | | | | | | | | | | that are function pointers Issue #1863
* | Extend variadic template support to various type combinationsWilliam S Fulton2022-12-221-0/+17
| |
* | Support multiple arguments in variadic templates.William S Fulton2022-12-223-10/+225
| | | | | | | | | | | | | | Remove warning SWIGWARN_CPP11_VARIADIC_TEMPLATE which was issued if more than one argument was used for a variadic template. SwigType enhancement: 'v.' now represents a variadic argument.
* | Fix syntax error for misplaced Doxygen comment after struct/class member.William S Fulton2022-12-064-0/+35
| | | | | | | | | | | | | | Fix syntax error using Doxygen member groups syntax, "///*}", when used after final struct/class member. Issue #1636
* | Improved handling of Doxygen comments in parameter listsWilliam S Fulton2022-12-052-3/+50
|/ | | | | | | Fix garbled Doxygen post comments in parameter lists. Fix syntax error parsing a trailing Doxygen comment in parameter lists. Closes #2023
* Fix syntax error parsing of Doxygen comments after last enum itemWilliam S Fulton2022-12-032-0/+24
| | | | | | | It is unconventional to have a doxygen comment after an enum item. It is attached to the previous, that is, the enum item to match Doxygen behaviour. Closes #1609
* Fix parsing of unconventional Doxygen post comments for enum items.William S Fulton2022-12-032-2/+61
| | | | Closes #1715
* Testcase fix for -Wdelete-non-virtual-dtorWilliam S Fulton2022-12-021-0/+1
|
* Improved template template parameters support.William S Fulton2022-12-027-10/+156
| | | | | | | | | | | | Previously, specifying more than one simple template template parameter resulted in a parse error. Now multiple template template parameters are working including instantiation with %template. Example: template <template<template<class> class, class> class Op, template<class> class X, class Y> class C { ... }; Closes #624 Closes #1021
* Test case fix for std::complex and non-floating types deprecationWilliam S Fulton2022-11-262-4/+4
| | | | | | From Visual Studio 2022: warning C4996: 'std::complex<int>::complex': warning STL4037: The effect of instantiating the template std::complex for any type other than float, double, or long double is unspecified. You can define _SILENCE_NONFLOATING_COMPLEX_DEPRECATION_WARNING to suppress this warning.
* Test cases fixWilliam S Fulton2022-11-262-5/+5
|
* Add missing testcase cpp11_template_parameters_decltypeWilliam S Fulton2022-11-261-0/+51
|
* Slightly better decltype() support for expressionsWilliam S Fulton2022-11-263-6/+31
| | | | | | | | | | | | | | | | | decltype now accepts C++ expressions instead of just an ID, such as: int i,j; ... decltype(i+j) ... ... decltype(&i) ... These result in a warning for non-trivial expressions which SWIG cannot evaluate: Warning 344: Unable to deduce decltype for 'i+j'. See 'Type Inference' in CPlusPlus.html for workarounds. Issue #1589 Issue #1590
* Fix syntax error parsing unnamed template parameters with a default.William S Fulton2022-11-251-1/+41
| | | | Closes #961
* Fix undefined behaviour in parserOlly Betts2022-11-251-1/+3
| | | | | | | Fix undefined behaviour in swig's parser when handling default parameter expressions containing method calls. Fixes #2447
* Merge branch 'rtests2'William S Fulton2022-11-236-0/+225
|\ | | | | | | | | | | | | | | | | | | | | * rtests2: more r tests more r tests added testcase pointer_reference [PHP] Update docs for removal of -noproxy in SWIG 4.1.0 Conflicts: CHANGES.current
| * more r testsAndLLA2022-11-201-0/+14
| |
| * more r testsAndLLA2022-11-164-0/+187
| |
| * added testcase pointer_referenceAndLLA2022-11-161-0/+24
| |
* | Restore testing template_expr testcaseWilliam S Fulton2022-11-232-4/+13
| | | | | | | | | | | | Problems handling < and > in template parameters are now fixed. Remove illegal C++ code (template typedefs) - replace with a function using same template.
* | Fix seg fault handling template parameter expressions containing '>='William S Fulton2022-11-221-3/+0
| | | | | | | | | | | | Similar to previous commit Issue #1037
* | Fix seg fault handling template parameter expressions containing '<='William S Fulton2022-11-221-0/+13
| | | | | | | | | | | | | | | | | | | | | | Recent commits ensure types are correctly stored in SwigType *. In particular template parameters are enclosed within '<(' and ')>'. Now we can confidently handle template parameters as really being delimited as such to fix an infinite loop handling template expressions containing '<' or '>'. The previous implementation only assumed template parameters were delimited by '<' and '>'. Issue #1037
* | Duplicate class template instantiations via %template changesWilliam S Fulton2022-11-188-9/+81
|/ | | | | | | | | | | Named duplicate class template instantiations now issue a warning and are ignored. Duplicate empty class template instantiations are quietly ignored. The test cases are fixed for this new behaviour. This commit is a pre-requisite for the near future so that the Python builtin wrappers can correctly use the SwigType_namestr function without generating duplicate symbol names.
* Merge pull request #2430 from AndLLA/rtestsWilliam S Fulton2022-11-064-0/+171
|\ | | | | more tests for R
| * more tests for RAndLLA2022-11-054-0/+171
| |