Fix using declarations and templates. %template was putting the
instantiated template into the global namespace instead of the namespace of the template definition. This fixes regression in swig-2.0.5 copying the std::pair typemaps which occurs with a 'using std::pair' declaration. This also fixes lots of other using declarations of template problems (template forward declarations. combinations using directives). git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13504 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
3e33774c8c
commit
54726b9d09
9 changed files with 339 additions and 7 deletions
|
|
@ -879,20 +879,19 @@ static String *resolve_create_node_scope(String *cname) {
|
|||
nscope = 0;
|
||||
nscope_inner = 0;
|
||||
|
||||
if (Swig_scopename_check(cname)) {
|
||||
String *prefix = Swig_scopename_prefix(cname);
|
||||
if (prefix && (Strncmp(prefix,"::",2) == 0))
|
||||
skip_lookup = 1;
|
||||
}
|
||||
if (Strncmp(cname,"::",2) == 0)
|
||||
skip_lookup = 1;
|
||||
|
||||
cname_node = skip_lookup ? 0 : Swig_symbol_clookup_no_inherit(cname, 0);
|
||||
|
||||
if (cname_node) {
|
||||
/* The symbol has been defined already or is in another scope.
|
||||
If it is a weak symbol, it needs replacing and if it was brought into the current scope
|
||||
via a using declaration, the scope needs adjusting appropriately for the new symbol. */
|
||||
via a using declaration, the scope needs adjusting appropriately for the new symbol.
|
||||
Similarly for defined templates. */
|
||||
Symtab *symtab = Getattr(cname_node, "sym:symtab");
|
||||
Node *sym_weak = Getattr(cname_node, "sym:weak");
|
||||
if (symtab && sym_weak) {
|
||||
if ((symtab && sym_weak) || Equal(nodeType(cname_node), "template")) {
|
||||
/* Check if the scope is the current scope */
|
||||
String *current_scopename = Swig_symbol_qualifiedscopename(0);
|
||||
String *found_scopename = Swig_symbol_qualifiedscopename(symtab);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue