summaryrefslogtreecommitdiff
path: root/Examples
Commit message (Collapse)AuthorAgeFilesLines
* take into account numinputs when counting argumentsMomtchil Momtchev2023-04-261-0/+24
|
* [js] Stop using swig -c++ for C examplesOlly Betts2023-04-2322-27/+41
|
* [js] Improve default for JSENGINEOlly Betts2023-04-223-17/+40
| | | | | | | | | | | | | | Previously the default was always "node", even if nodejs wasn't detected by configure. This leads to a confusing failure from "make check" if you have another support JS engine installed but not node. Now the default it picked based on which engines configure found. If only one was detected, that should be used. If multiple are, you can override the default choice by specifying e.g. ENGINE=jsc on the make command line. Fixes #2453
* [js] Turn on C++ output for node tooOlly Betts2023-04-221-1/+1
| | | | | | | | | Nodejs is like V8 and needs C++ output enabled when wrapping C code. The testsuite was masking this bug by using SWIG options `-v8 -DBUILDING_NODE_EXTENSION=1` rather than `-node` when testing with nodejs, while the javascript examples currently all seem to all get processed with -c++.
* [perl,ruby] Test OUTPUT string& typemapOlly Betts2023-04-212-1/+5
|
* [lua] Test INPUT,INOUT,OUTPUT for std::string&Olly Betts2023-04-212-1/+7
|
* [php] Support INPUT,INOUT,OUTPUT for std::string&Olly Betts2023-04-212-2/+36
| | | | | | | By default SWIG/PHP wraps std::string& as a pass-by-reference PHP string parameter, but sometimes such a parameter is only for input or only for output, so add support for the named typemaps that other target languages support.
* [OCaml] Fix reference typemaps for std::stringZackery Spytz2023-04-214-0/+90
| | | | | | | | | | | | | | | | | | | Fix warnings in the extend_template_method, li_std_string, and template_methods tests. std::string was missing a typecheck typemap. Add extend_template_method_runme.ml, li_std_string_runme.ml, and template_methods_runme.ml. Add INPUT, OUTPUT and INOUT typemaps for string & Use the INOUT typemap in the strings_test example. In the strings_test example, takes_and_gives_std_string() was relying on the silly fact that an argout typemap for string & was enabled by default. Remove the in, out, and typecheck typemaps for string &. Closes: #1439
* [ocaml] Use CXXFLAGS when compiling C++ testcasesOlly Betts2023-04-211-3/+3
| | | | Fixes failure for cpp20_spaceship_operator.
* Fix #ifdef and #ifndef to work inside a %defineOlly Betts2023-04-211-0/+35
| | | | | | | | Previously they were silently ignored in this context (but #if defined already worked here if you need a workaround which works for older versions). Fixes #2183
* Add regression test for << in array size bugOlly Betts2023-04-202-1/+5
| | | | | | | Go is happy with the testcase if the type is changed from int to char, so just go with that. See https://sourceforge.net/p/swig/bugs/983/
* Remove remaining traces of PHP7 supportOlly Betts2023-04-202-67/+34
| | | | | The bulk of this was already removed in e3b112c69ceed5c39cb07fa45a3ba62b27712679.
* Merge branch 'go-argcargv'Olly Betts2023-04-202-1/+23
|\
| * Clarify comment in _runme.goOlly Betts2023-04-201-1/+4
| |
| * Drop __cplusplus conditionals from testcaseOlly Betts2023-04-201-4/+0
| | | | | | | | This is a C++ testcase so these aren't useful.
| * Add argc and argv multi-argument to go.Erez Geva2023-04-192-1/+24
| | | | | | | | | | | | Make argc and argv test works in C. Signed-off-by: Erez Geva <ErezGeva2@gmail.com>
* | Make y const in new testcaseOlly Betts2023-04-191-1/+1
| | | | | | | | Needed to get compilable code for Lua and guile.
* | Merge branch 'macro-partial-expansion'Olly Betts2023-04-192-0/+37
|\ \
| * | Adjust new testsOlly Betts2023-04-192-15/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a regression test based on https://sourceforge.net/p/swig/bugs/1163/ since this patch solves that case too. Replace the __attribute__ test case from #2525 with a variant of the 1163 regression test, since __attribute__ is specific to certain compilers. Adjust the self-referential test case to actually work - it wasn't valid C code before.
| * | inline the header into the interface fileMomtchil Momtchev2023-04-172-22/+25
| | |
| * | actually test the valueMomtchil Momtchev2023-04-142-1/+4
| | |
| * | save missing files from previous commitMomtchil Momtchev2023-04-142-2/+3
| | |
| * | move the unit testsMomtchil Momtchev2023-04-142-11/+21
| | |
| * | restore the unit testMomtchil Momtchev2023-04-112-0/+13
| | |
* | | [scilab] Extract values with ":"Clément DAVID2023-04-193-5/+37
| |/ |/| | | | | Fixes #894
* | 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>;