summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp')
-rw-r--r--TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp
index 23f291d3d50..c13c80e18d0 100644
--- a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp
+++ b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp
@@ -974,16 +974,31 @@ ifr_adding_visitor::visit_constant (AST_Constant *node)
}
AST_Expression::AST_ExprValue *ev = node->constant_value ()->ev ();
+ AST_Decl *td = ev->tdef;
- CORBA::PrimitiveKind pkind = this->expr_type_to_pkind (ev->et);
-
- CORBA::IDLType_var idl_type =
- be_global->repository ()->get_primitive (pkind
+ if (td != 0 && td->node_type () == AST_Decl::NT_typedef)
+ {
+ // This constant's type is a typedef - look up the typedef to
+ // pass to create_constant().
+ CORBA::Contained_var contained =
+ be_global->repository ()->lookup_id (td->repoID ()
ACE_ENV_ARG_PARAMETER);
- ACE_TRY_CHECK;
+ ACE_TRY_CHECK;
- CORBA::Any any;
+ this->ir_current_ = CORBA::IDLType::_narrow (contained.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ else
+ {
+ CORBA::PrimitiveKind pkind = this->expr_type_to_pkind (ev->et);
+ this->ir_current_ =
+ be_global->repository ()->get_primitive (pkind
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ CORBA::Any any;
this->load_any (ev,
any);
@@ -996,7 +1011,7 @@ ifr_adding_visitor::visit_constant (AST_Constant *node)
id,
node->local_name ()->get_string (),
node->version (),
- idl_type.in (),
+ this->ir_current_.in (),
any
ACE_ENV_ARG_PARAMETER
);