add module option to import

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@7429 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Marcelo Matus 2005-09-11 19:31:23 +00:00
commit 6b5a64bd92
3 changed files with 64 additions and 14 deletions

View file

@ -1,6 +1,47 @@
Version 1.3.26 (in progress) Version 1.3.26 (in progress)
============================ ============================
09/11/2005: mmatus
Adding the module option to the %import directive. Now you
can use it as
%import(module="BigModule") foo.i
where subfile could (or not) define the module name via
the %module directive. The module option take precedence
and it has the same effects than having the directive
%module BigModule
inside the imported file foo.i.
You can use the option in mainly two cases:
1.- You used the -module option when you generated the
module to be imported, and hence the module name in
the imported %module directive is not really useful.
2.- The module you want to import is very large, and it
has several .i/.h files. Then, if you just one to
import a class or so from the module, says 'foo', and
not the entire module via importing the main
BigModule.i file, then you just do:
%import(module="BigModule") foo.h
or
%import(module="BigModule") foo.i
where foo.i contains the 'foo' declaration and maybe a
couple of extra %include directives, as needed.
09/11/2005: mmatus
Fix bug #1282637, about the -module option not having effect
in places where it was needed.
09/11/2005: wsfulton 09/11/2005: wsfulton
When wrapping variables, ensure that none of the typemaps used for the When wrapping variables, ensure that none of the typemaps used for the
set wrappers are used when generating the get wrappers. I doubt this was a set wrappers are used when generating the get wrappers. I doubt this was a

View file

@ -12,6 +12,6 @@
#include "imports_b.h" #include "imports_b.h"
%} %}
%import "imports_a.i" %import(module="imports_a") "imports_a.i"
%include "imports_b.h" %include "imports_b.h"

View file

@ -1750,24 +1750,33 @@ include_directive: includetype options string LBRACKET {
cparse_file = Swig_copy_string($3); cparse_file = Swig_copy_string($3);
cparse_line = 0; cparse_line = 0;
} interface RBRACKET { } interface RBRACKET {
String *modulename = 0;
$$ = $6; $$ = $6;
cparse_file = $1.filename; cparse_file = $1.filename;
cparse_line = $1.line; cparse_line = $1.line;
if (strcmp($1.type,"include") == 0) set_nodeType($$,"include"); if (strcmp($1.type,"include") == 0) {
if (strcmp($1.type,"import") == 0) set_nodeType($$,"import"); set_nodeType($$,"include");
Setattr($$,"name",$3); } else if (strcmp($1.type,"import") == 0) {
/* Search for the module (if any) */ set_nodeType($$,"import");
{ /* try to get the modulename from the options */
Node *n = firstChild($$); modulename = $2 ? Getattr($2,"module") : 0;
while (n) {
if (Strcmp(nodeType(n),"module") == 0) {
Setattr($$,"module",Getattr(n,"name"));
break;
}
n = nextSibling(n);
}
} }
Setattr($$,"name",$3);
Setattr($$,"options",$2); Setattr($$,"options",$2);
if (!modulename) {
/* Search for the first module node (if any) */
Node *n = firstChild($$);
while (n) {
if (Strcmp(nodeType(n),"module") == 0) {
modulename = Getattr(n,"name");
break;
}
n = nextSibling(n);
}
}
Setattr($$,"module",Copy(modulename));
} }
; ;