out-of-scope template definitions fixed

nested_private test disabled again
This commit is contained in:
Vladimir Kalinin 2013-12-04 16:21:33 +04:00
commit 053c605df0
2 changed files with 14 additions and 4 deletions

View file

@ -84,6 +84,7 @@ CPP_TEST_BROKEN += \
extend_variable \ extend_variable \
li_std_vector_ptr \ li_std_vector_ptr \
li_boost_shared_ptr_template \ li_boost_shared_ptr_template \
nested_private \
overload_complicated \ overload_complicated \
template_default_pointer \ template_default_pointer \
template_expr \ template_expr \
@ -278,7 +279,6 @@ CPP_TEST_CASES += \
naturalvar_more \ naturalvar_more \
nested_class \ nested_class \
nested_comment \ nested_comment \
nested_private \
nested_scope \ nested_scope \
nested_workaround \ nested_workaround \
newobject1 \ newobject1 \

View file

@ -3389,6 +3389,7 @@ cpp_class_decl : storage_class cpptype idcolon inherit LBRACE {
scope = resolve_create_node_scope($3); scope = resolve_create_node_scope($3);
/* save nscope_inner to the class - it may be overwritten in nested classes*/ /* save nscope_inner to the class - it may be overwritten in nested classes*/
Setattr($<node>$, "nested:innerscope", nscope_inner); Setattr($<node>$, "nested:innerscope", nscope_inner);
Setattr($<node>$, "nested:nscope", nscope);
Setfile(scope,cparse_file); Setfile(scope,cparse_file);
Setline(scope,cparse_line); Setline(scope,cparse_line);
$3 = scope; $3 = scope;
@ -3465,8 +3466,10 @@ cpp_class_decl : storage_class cpptype idcolon inherit LBRACE {
$$ = currentOuterClass; $$ = currentOuterClass;
currentOuterClass = Getattr($$, "nested:outer"); currentOuterClass = Getattr($$, "nested:outer");
nscope_inner = Getattr($<node>$, "nested:innerscope"); nscope_inner = Getattr($<node>$, "nested:innerscope");
nscope = Getattr($<node>$, "nested:nscope");
Delattr($<node>$, "nested:innerscope"); Delattr($<node>$, "nested:innerscope");
if (nscope_inner) /*actual parent class for this class*/ Delattr($<node>$, "nested:nscope");
if (nscope_inner && Strcmp(nodeType(nscope_inner), "class") == 0) /* actual parent class for this class */
Setattr($$, "nested:outer", nscope_inner); Setattr($$, "nested:outer", nscope_inner);
if (!currentOuterClass) if (!currentOuterClass)
inclass = 0; inclass = 0;
@ -3546,14 +3549,21 @@ cpp_class_decl : storage_class cpptype idcolon inherit LBRACE {
Swig_symbol_setscope(Getattr(nscope_inner,"symtab")); Swig_symbol_setscope(Getattr(nscope_inner,"symtab"));
Delete(Namespaceprefix); Delete(Namespaceprefix);
Namespaceprefix = Swig_symbol_qualifiedscopename(0); Namespaceprefix = Swig_symbol_qualifiedscopename(0);
yyrename = Copy(Getattr($<node>$, "class_rename"));
add_symbols($$); add_symbols($$);
Delattr($$, "class_rename");
/* but the variable definition in the current scope */ /* but the variable definition in the current scope */
Swig_symbol_setscope(cscope); Swig_symbol_setscope(cscope);
Delete(Namespaceprefix); Delete(Namespaceprefix);
Namespaceprefix = Swig_symbol_qualifiedscopename(0); Namespaceprefix = Swig_symbol_qualifiedscopename(0);
add_symbols($9); add_symbols($9);
nscope_inner = 0; if (nscope) {
$$ = $9; $$ = nscope;
if ($9)
appendSibling($$, $9);
}
else if (!SwigType_istemplate(ty) && template_parameters == 0)
$$ = $9;
} else { } else {
Delete(yyrename); Delete(yyrename);
yyrename = 0; yyrename = 0;