From 3507f3c21ac55d6ffe1806a1b46fcbc7113bba55 Mon Sep 17 00:00:00 2001 From: Fred Hornsey Date: Wed, 9 Jan 2019 19:42:15 -0600 Subject: Fix for invalid valuetype visibility Fix for #784 revealed after #723 In tao_idl, do not pass member visibility via the Bison stack indirectly. --- TAO/TAO_IDL/fe/idl.ypp | 51 +++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) (limited to 'TAO/TAO_IDL/fe/idl.ypp') diff --git a/TAO/TAO_IDL/fe/idl.ypp b/TAO/TAO_IDL/fe/idl.ypp index 9d759cf5745..923357f130c 100644 --- a/TAO/TAO_IDL/fe/idl.ypp +++ b/TAO/TAO_IDL/fe/idl.ypp @@ -378,6 +378,7 @@ AST_Expression::ExprType t_param_const_type = AST_Expression::EV_none; %type seq_head %type member_i; +%type visibility; %% /* @@ -1451,22 +1452,32 @@ value_element ';' ; -state_member +visibility : IDL_PUBLIC { - /* is $0 to member_i */ - $$ = AST_Field::vis_PUBLIC; - } - member_i - { + $$ = AST_Field::vis_PUBLIC; } | IDL_PRIVATE { - /* is $0 to member_i */ - $$ = AST_Field::vis_PRIVATE; + $$ = AST_Field::vis_PRIVATE; } - member_i + ; + +state_member + : visibility member_i { + if ($2) + { + AST_Decls &decls = *$2; + for (size_t i = 0; i < decls.size (); i++) + { + AST_Field * field = dynamic_cast(decls[i]); + if (field) + { + field->visibility ($1); + } + } + } } ; @@ -3011,19 +3022,15 @@ members | %empty ; -member : +member + : annotations_maybe member_i { - /* is $0 to member_i */ - $$ = AST_Field::vis_NA; - } - annotations_maybe member_i - { - if ($3) + if ($1) { - AST_Decls & decls = *$3; + AST_Decls &decls = *$2; for (size_t i = 0; i < decls.size (); i++) { - decls[i]->annotation_appls ($2); + decls[i]->annotation_appls ($1); } } } @@ -3080,13 +3087,7 @@ member_i : continue; } - /* $0 denotes Visibility, must be on yacc reduction stack. */ - f = - idl_global->gen ()->create_field ( - tp, - d->name (), - $0 - ); + f = idl_global->gen ()->create_field (tp, d->name ()); members->push_back (f); (void) s->fe_add_field (f); } -- cgit v1.2.1