diff options
author | Fred Hornsey <hornseyf@objectcomputing.com> | 2019-01-09 19:42:15 -0600 |
---|---|---|
committer | Fred Hornsey <hornseyf@objectcomputing.com> | 2019-01-09 19:44:18 -0600 |
commit | 3507f3c21ac55d6ffe1806a1b46fcbc7113bba55 (patch) | |
tree | c310efee0ddf01bc4caab21364beb2a138026029 /TAO/TAO_IDL/fe/idl.ypp | |
parent | a2f9a9ef8bf6b76a631e748ee89467926d2781ac (diff) | |
download | ATCD-3507f3c21ac55d6ffe1806a1b46fcbc7113bba55.tar.gz |
Fix for invalid valuetype visibility
Fix for #784 revealed after #723
In tao_idl, do not pass member visibility via the Bison stack indirectly.
Diffstat (limited to 'TAO/TAO_IDL/fe/idl.ypp')
-rw-r--r-- | TAO/TAO_IDL/fe/idl.ypp | 51 |
1 files changed, 26 insertions, 25 deletions
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 <decl_annotations_pair_val> seq_head %type <decls_val> member_i; +%type <vival> visibility; %% /* @@ -1451,22 +1452,32 @@ value_element ';' ; -state_member +visibility : IDL_PUBLIC { - /* is $0 to member_i */ - $<vival>$ = AST_Field::vis_PUBLIC; - } - member_i - { + $$ = AST_Field::vis_PUBLIC; } | IDL_PRIVATE { - /* is $0 to member_i */ - $<vival>$ = 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<AST_Field*>(decls[i]); + if (field) + { + field->visibility ($1); + } + } + } } ; @@ -3011,19 +3022,15 @@ members | %empty ; -member : +member + : annotations_maybe member_i { - /* is $0 to member_i */ - $<vival>$ = 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 (), - $<vival>0 - ); + f = idl_global->gen ()->create_field (tp, d->name ()); members->push_back (f); (void) s->fe_add_field (f); } |