Commit graph

46 commits

Author SHA1 Message Date
Vadim Zeitlin
3d6880aad1 Start removing proxy layer, just use the wrapped functions directly
The proxy layer, and all the extra complexity associated with it, seemed to be
only necessary in order to try to allow using the same name for the wrapped
global functions as were used for them in the original C or C++ code being
wrapped. However this could simply never work in all cases, notably it didn't
work at all when using ELF shared libraries under Unix as the functions with
the same name defined in the main program were interposed and replaced the
functions defined in the shared library, meaning that the proxy function foo()
called wrapper function _wrap_foo() which called back into proxy function
foo() itself again, resulting in guaranteed stack overflow. The only possible
way to fix this would be to use "protected" ELF visibility for the original
functions, but this is not always possible (e.g. if the sources of the
original library are not available) and not simple even when it is and,
besides, protected visibility has its own problems -- notably by making it
impossible to hook the library functions when you actually want to do it.
Besides, proxy-based approach simply couldn't work at all when using static
linking as it resulted in two copies of the function with the same name

Most importantly, however, the main task of this module is to wrap C++
classes, not C functions, and renaming them in the wrapper is not necessary at
all in this case as there is no conflict with the original names in this case.
So simply drop the idea of generating a separate proxy header and generate a
header declaring the functions declared in the wrapper instead and, also, do
not give them "_wrap_" prefix whenever possible, i.e. only do it for the
global functions.

This simplifies SWIG code itself and makes it simpler to use its output as
it's not necessary to link both with the wrapper (dynamically) and with the
proxy (statically) and it's not enough to link with the wrapper only and it
can be done in any way (i.e. either statically or dynamically).

As a side effect of this change, Swig_name_proxy() is not necessary any more
and was removed, eliminating the only difference with the master branch in any
source file other than c.cxx itself.
2016-04-14 02:44:45 +02:00
Vadim Zeitlin
e8ec13f56b Remove SWIG_MAKE_DELETE() macro from C runtime
This doesn't seem to be necessary nor even useful at all, just get rid of it
completely and expand it manually in the only place where it was used.
2016-04-13 18:10:36 +02:00
Vadim Zeitlin
82ce7e4725 Force the unit test suite to pass for C
Disable all currently failing tests.
2016-04-13 18:10:35 +02:00
Vadim Zeitlin
3b087fcb2b Fix running C test suite when using a separate build directory
Correct top_srcdir path and use ../$(srcdir) instead of just "../" which may
not be the same when building in another directory.
2016-04-13 18:10:35 +02:00
Leif Middelschulte
4da42db22e Remove the std_vector test I've added while trying for testing purposes
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13627 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-16 12:52:29 +00:00
Leif Middelschulte
ed402ceb37 Don't delete variables twice.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13587 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-10 15:43:11 +00:00
Leif Middelschulte
78ccc8f228 Fix wrong headers inclusion
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13586 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-10 14:50:18 +00:00
Leif Middelschulte
c81a3bd5ec Add typecast to silence compiler warnings caused by inheritance.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13585 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-10 14:50:04 +00:00
Leif Middelschulte
a84787c273 Rename reference to C++ native types from 'atomic' to 'built_in'
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13583 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-10 14:49:37 +00:00
Leif Middelschulte
56db1d6e4e Add C backend runtime implementation for basic C++ std::vector<int> test
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13581 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-09 20:03:42 +00:00
Leif Middelschulte
d272709899 Add C runtime test for corresponding C++ basic template test
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13573 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-09 13:06:22 +00:00
Leif Middelschulte
698d1851c3 Add C runtime test for basic C++ template functions
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13568 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-08 16:06:56 +00:00
Leif Middelschulte
b0318dae69 Add test for 'natural' C++ std::string handling in C (char*).
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13482 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-01 12:53:17 +00:00
Leif Middelschulte
44f4dd4dc0 Extend test to check dynamic binding of virtual methods
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13480 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-08-01 00:51:50 +00:00
Leif Middelschulte
130ae2cb26 Implement basic C++ exception test for C backend.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13479 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-31 21:15:33 +00:00
Leif Middelschulte
ffb2b6b73b Implement basic C++ virtual method test case for C
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13478 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-31 21:08:39 +00:00
Leif Middelschulte
ea240fdde3 Rename cpp_atomic_* tests to cpp_basic_*
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13423 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-27 14:05:14 +00:00
Leif Middelschulte
f7b5211739 Add C implementation of test cpp_atomic_class
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13422 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:23:53 +00:00
Leif Middelschulte
15e8b647a2 Add C implementation of test cpp_atomic_class_enum
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13420 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:23:27 +00:00
Leif Middelschulte
2080038170 Add C implementation of test cpp_atomic_class_method
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13418 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:23:02 +00:00
Leif Middelschulte
f24ce340ff Add C implementation of test cpp_atomic_class_var_pub_member_atom
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13416 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:22:37 +00:00
Leif Middelschulte
dbd8d3aabd Add C implementation of test cpp_atomic_class_var_pub_member_class
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13414 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:22:08 +00:00
Leif Middelschulte
cfc1a71b71 Add C implementation of test cpp_atomic_global_enum
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13412 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:21:35 +00:00
Leif Middelschulte
7d3677a5c8 Add C implementation of test cpp_atomic_global_var_atom
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13410 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:21:03 +00:00
Leif Middelschulte
48fe82841f Add C implementation of test cpp_atomic_global_var_class
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13408 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:20:29 +00:00
Leif Middelschulte
fca2262e28 Add C implementation of test cpp_atomic_namespaced_class
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13406 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:20:02 +00:00
Leif Middelschulte
3afdd50c78 Fix tests' LD_LYBRARY_PATH and alternatives
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13404 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-26 20:19:36 +00:00
Leif Middelschulte
95cd7ea300 Fix cpp_enum runtime test to include the right header
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13312 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-09 23:29:24 +00:00
Leif Middelschulte
f4ebc3068d Add runtime C++ test for enums.
What does not (entirely) work:
- 'extern "C"' enum declaration
- 'typedef enum {...} play_state'
- C++ class enums value definition in proxy

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13310 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-09 22:35:19 +00:00
Leif Middelschulte
8e66df1b5a Implement test case for C++ features listed below
- pointers
- references
- values
- static variables
- default parameters
- function pointers (reason the test fails)
- global (static) variables (code commented out so far)

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13259 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-07-05 00:23:17 +00:00
Leif Middelschulte
f18a62f57d Implement some test cases for the C backend
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13211 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-06-30 16:03:57 +00:00
Leif Middelschulte
5db9c97963 Compile _proxy.c even if _runme.c does not exist.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2012-c@13195 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-06-26 16:37:50 +00:00
William S Fulton
d6b81eb831 Revert rev 11187 "Merged with recent changes from trunk."
This reverts commit c595e4d90ebfd63eb55430c735bb121cf690bd59.

Conflicts:

	Source/Modules/c.cxx

From: William S Fulton <wsf@fultondesigns.co.uk>

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@13033 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2012-05-06 01:13:16 +00:00
Maciej Drwal
3ab6cb695e One more runtime test case
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@11190 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2009-04-15 23:38:48 +00:00
Maciej Drwal
32e03aa13d Many major improvements. Almost all testsuite compiles now.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@11189 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2009-04-15 23:30:16 +00:00
Maciej Drwal
a2dc2756c8 Several major fixes for: arrays, static members, member func.ptrs., exceptions, ... Lots of tests runs ok now.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@11188 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2009-04-13 21:23:07 +00:00
Maciej Drwal
8c74fa0f46 Merged with recent changes from trunk.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@11187 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2009-04-11 16:46:47 +00:00
Maciej Drwal
5002c69cd6 Fixed some issues with member variables handling
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@11155 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2009-03-18 15:04:20 +00:00
Maciej Drwal
f2cd76308e include in char_strings_runme.c
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10797 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2008-08-24 12:59:17 +00:00
Maciej Drwal
40fd778b23 1. char_strings runtime test
2. next chapters of HTML doc
3. minor bugfixes


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10796 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2008-08-24 12:39:30 +00:00
Maciej Drwal
54860c9595 1. Fixed the bug in enums. Now 'enums' test is compiling OK.
2. -noexcept flag disables generating exception-related code (like array of type names in SwigObj, object registry, etc.). This can be used when we are sure we won't handle exceptions on the C side, and this will generate much less code. 
3. Modified typemaps for object arrays. Multidimensional ones still needs some fixing.
4. Added 'enums' and 'cast_operator' runtime tests.

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10771 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2008-08-17 13:42:19 +00:00
Maciej Drwal
dcec3c3fb0 Added std_string support. Renamed SWIG_exception to SWIG_exc to avoid name collision with macro in Lib/exception.i.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10720 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2008-07-30 22:09:02 +00:00
Maciej Drwal
9c5ef7558c Support for enums and typedefs.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10691 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2008-07-21 10:55:05 +00:00
Maciej Drwal
88facfd390 Exceptions support for C. exception_order test shows how to use type information to achieve correct catching order. Examples cleanup.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10671 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2008-07-17 00:52:11 +00:00
Maciej Drwal
542c21b6fe Few C typemaps fixes (still using experimental approach).
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10658 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2008-07-11 16:12:14 +00:00
Maciej Drwal
a13c5976b5 Fixed naming convention issues (internal Swig variables, shadow -> proxy, test.c -> runme.c, etc.), modified Makefiles, bugfixes ("name" -> "sym:name"). Started C test-suite.
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/branches/gsoc2008-maciekd@10655 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2008-07-09 20:02:20 +00:00