summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/fe/idl.ypp
diff options
context:
space:
mode:
authorFred Hornsey <hornseyf@objectcomputing.com>2019-01-09 19:42:15 -0600
committerFred Hornsey <hornseyf@objectcomputing.com>2019-01-09 19:44:18 -0600
commit3507f3c21ac55d6ffe1806a1b46fcbc7113bba55 (patch)
treec310efee0ddf01bc4caab21364beb2a138026029 /TAO/TAO_IDL/fe/idl.ypp
parenta2f9a9ef8bf6b76a631e748ee89467926d2781ac (diff)
downloadATCD-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.ypp51
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);
}