From 053c605df047114557613339110367c3ee77ea4e Mon Sep 17 00:00:00 2001 From: Vladimir Kalinin Date: Wed, 4 Dec 2013 16:21:33 +0400 Subject: [PATCH] out-of-scope template definitions fixed nested_private test disabled again --- Examples/test-suite/common.mk | 2 +- Source/CParse/parser.y | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index e444f869d79..a59fba18bfc 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -84,6 +84,7 @@ CPP_TEST_BROKEN += \ extend_variable \ li_std_vector_ptr \ li_boost_shared_ptr_template \ + nested_private \ overload_complicated \ template_default_pointer \ template_expr \ @@ -278,7 +279,6 @@ CPP_TEST_CASES += \ naturalvar_more \ nested_class \ nested_comment \ - nested_private \ nested_scope \ nested_workaround \ newobject1 \ diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y index 7a3fc1a29a9..cc0d3f4ca3d 100644 --- a/Source/CParse/parser.y +++ b/Source/CParse/parser.y @@ -3389,6 +3389,7 @@ cpp_class_decl : storage_class cpptype idcolon inherit LBRACE { scope = resolve_create_node_scope($3); /* save nscope_inner to the class - it may be overwritten in nested classes*/ Setattr($$, "nested:innerscope", nscope_inner); + Setattr($$, "nested:nscope", nscope); Setfile(scope,cparse_file); Setline(scope,cparse_line); $3 = scope; @@ -3465,8 +3466,10 @@ cpp_class_decl : storage_class cpptype idcolon inherit LBRACE { $$ = currentOuterClass; currentOuterClass = Getattr($$, "nested:outer"); nscope_inner = Getattr($$, "nested:innerscope"); + nscope = Getattr($$, "nested:nscope"); Delattr($$, "nested:innerscope"); - if (nscope_inner) /*actual parent class for this class*/ + Delattr($$, "nested:nscope"); + if (nscope_inner && Strcmp(nodeType(nscope_inner), "class") == 0) /* actual parent class for this class */ Setattr($$, "nested:outer", nscope_inner); if (!currentOuterClass) inclass = 0; @@ -3546,14 +3549,21 @@ cpp_class_decl : storage_class cpptype idcolon inherit LBRACE { Swig_symbol_setscope(Getattr(nscope_inner,"symtab")); Delete(Namespaceprefix); Namespaceprefix = Swig_symbol_qualifiedscopename(0); + yyrename = Copy(Getattr($$, "class_rename")); add_symbols($$); + Delattr($$, "class_rename"); /* but the variable definition in the current scope */ Swig_symbol_setscope(cscope); Delete(Namespaceprefix); Namespaceprefix = Swig_symbol_qualifiedscopename(0); add_symbols($9); - nscope_inner = 0; - $$ = $9; + if (nscope) { + $$ = nscope; + if ($9) + appendSibling($$, $9); + } + else if (!SwigType_istemplate(ty) && template_parameters == 0) + $$ = $9; } else { Delete(yyrename); yyrename = 0;