diff options
Diffstat (limited to 'TAO/TAO_IDL')
77 files changed, 1424 insertions, 5557 deletions
diff --git a/TAO/TAO_IDL/ast/ast_component.cpp b/TAO/TAO_IDL/ast/ast_component.cpp index b83509eff93..3e57283f4fc 100644 --- a/TAO/TAO_IDL/ast/ast_component.cpp +++ b/TAO/TAO_IDL/ast/ast_component.cpp @@ -73,58 +73,6 @@ AST_Component::redefine (AST_Interface *from) this->pd_consumes = c->pd_consumes; } -AST_Decl * -AST_Component::look_in_inherited (UTL_ScopedName *e, - idl_bool treat_as_ref) -{ - AST_Decl *d = 0; - - if (this->pd_base_component != 0) - { - d = this->pd_base_component->lookup_by_name (e, treat_as_ref); - } - - return d; -} - -// Look through supported interface list. -AST_Decl * -AST_Component::look_in_supported (UTL_ScopedName *e, - idl_bool treat_as_ref) -{ - AST_Decl *d = 0; - AST_Interface **is = 0; - long nis = -1; - - // Can't look in an interface which was not yet defined. - if (!this->is_defined ()) - { - idl_global->err ()->fwd_decl_lookup (this, - e); - return 0; - } - - // OK, loop through supported interfaces. - - // (Don't leave the inheritance hierarchy, no module or global ...) - // Find all and report ambiguous results as error. - - for (nis = this->n_supports (), is = this->supports (); - nis > 0; - nis--, is++) - { - d = (*is)->lookup_by_name (e, - treat_as_ref, - 0 /* not in parent */); - if (d != 0) - { - break; - } - } - - return d; -} - AST_Component * AST_Component::base_component (void) const { diff --git a/TAO/TAO_IDL/ast/ast_decl.cpp b/TAO/TAO_IDL/ast/ast_decl.cpp index c0721b6a34b..dcc36e6cc99 100644 --- a/TAO/TAO_IDL/ast/ast_decl.cpp +++ b/TAO/TAO_IDL/ast/ast_decl.cpp @@ -871,6 +871,11 @@ AST_Decl::repoID (char *value) } this->repoID_ = value; + + // Forces version to be set to the last id component. + delete [] this->version_; + this->version_ = 0; + (void) this->version (); } const char * @@ -915,10 +920,6 @@ AST_Decl::version (void) { this->version_ = ACE::strnew (tail2 + 1); } - else - { - this->version_ = ACE::strnew ("1.0"); - } } return this->version_; diff --git a/TAO/TAO_IDL/ast/ast_expression.cpp b/TAO/TAO_IDL/ast/ast_expression.cpp index 4cd2bf8af20..bdd645d1024 100644 --- a/TAO/TAO_IDL/ast/ast_expression.cpp +++ b/TAO/TAO_IDL/ast/ast_expression.cpp @@ -1707,8 +1707,6 @@ eval_kind(AST_Expression::AST_ExprValue *ev, AST_Expression::EvalKind ek) #endif /* ! defined (ACE_LACKS_LONGLONG_T) */ case AST_Expression::EK_octet: return coerce_value (ev, AST_Expression::EV_octet); - case AST_Expression::EK_bool: - return coerce_value (ev, AST_Expression::EV_bool); default: return 0; } @@ -1716,19 +1714,11 @@ eval_kind(AST_Expression::AST_ExprValue *ev, AST_Expression::EvalKind ek) // Private operations. -// @@@ (JP) CORBA 2.6 and earlier say that in a constant expression, -// each subexpression must fall within the range of the assigned type. -// However, this may be hard for the compiler in some cases (must -// evaluate all grouping possibilities). So there is an outstanding -// issue, #1139, and the best guess is that it will ultimately be -// decided that only the final value must fall within the range of -// the assigned type. So there are no checks here, only in coerce(). - // Apply binary operators to an AST_Expression after evaluating // its sub-expressions. // Operations supported: '+', '-', '*', '/' AST_Expression::AST_ExprValue * -AST_Expression::eval_bin_op (void) +AST_Expression::eval_bin_op (AST_Expression::EvalKind /* ek */) { AST_ExprValue *retval = 0; @@ -1736,14 +1726,29 @@ AST_Expression::eval_bin_op (void) { return 0; } - +// @@@ (JP) See comment below. +/* + this->pd_v1->set_ev (this->pd_v1->eval_internal (ek)); + + if (this->pd_v1->ev () == 0) + { + return 0; + } +*/ this->pd_v1->set_ev (this->pd_v1->coerce (EV_double)); if (this->pd_v1->ev () == 0) { return 0; } +/* + this->pd_v2->set_ev (this->pd_v2->eval_internal (ek)); + if (this->pd_v2->ev () == 0) + { + return 0; + } +*/ this->pd_v2->set_ev (this->pd_v2->coerce (EV_double)); if (pd_v2->ev () == 0) @@ -1793,6 +1798,15 @@ AST_Expression::eval_bin_op (void) return 0; } + // @@@ (JP) CORBA 2.6 and earlier say that in a constant expression, + // each subexpression must fall within the range of the assigned type. + // However, this may be hard for the compiler in some cases (must + // evaluate all grouping possibilities). So there is an outstanding + // issue, #1139, and the best guess is that it will ultimately be + // decided that only the final value must fall within the range of + // the assigned type. So I've commented out the checks above, and + // added this final evaluation below. (02-06-25). +// return eval_kind (retval, ek); return retval; } @@ -1828,12 +1842,6 @@ AST_Expression::eval_bit_op (AST_Expression::EvalKind ek) this->pd_v2->set_ev (this->pd_v2->coerce (EV_ulong)); retval->et = EV_ulong; } - else if (ek == EK_bool) - { - this->pd_v1->set_ev (this->pd_v1->coerce (EV_bool)); - this->pd_v2->set_ev (this->pd_v2->coerce (EV_bool)); - retval->et = EV_bool; - } else { this->pd_v1->set_ev (this->pd_v1->coerce (EV_long)); @@ -2169,9 +2177,6 @@ AST_Expression::coerce (AST_Expression::ExprType t) case EV_octet: this->pd_ev = this->eval_internal (EK_octet); break; - case EV_bool: - this->pd_ev = this->eval_internal (EK_bool); - break; default: this->pd_ev = this->eval_internal (EK_const); break; @@ -2272,13 +2277,6 @@ AST_Expression::eval_internal (AST_Expression::EvalKind ek) return eval_kind (this->pd_ev, ek); } - - if (ek == EK_bool || ek == EK_octet) - { - // Operators may be used only with integer or floating point types. - idl_global->err ()->illegal_infix (); - return 0; - } // OK, must evaluate operator. switch (this->pd_ec) @@ -2288,7 +2286,7 @@ AST_Expression::eval_internal (AST_Expression::EvalKind ek) case EC_mul: case EC_div: case EC_mod: - this->pd_ev = this->eval_bin_op (); + this->pd_ev = this->eval_bin_op (ek); return eval_kind (this->pd_ev, ek); case EC_or: diff --git a/TAO/TAO_IDL/ast/ast_home.cpp b/TAO/TAO_IDL/ast/ast_home.cpp index bbc1c40615c..c098ccb4763 100644 --- a/TAO/TAO_IDL/ast/ast_home.cpp +++ b/TAO/TAO_IDL/ast/ast_home.cpp @@ -7,7 +7,6 @@ #include "ast_visitor.h" #include "utl_identifier.h" #include "utl_indenter.h" -#include "utl_err.h" #include "global_extern.h" ACE_RCSID (ast, @@ -58,58 +57,6 @@ AST_Home::~AST_Home (void) { } -AST_Decl * -AST_Home::look_in_inherited (UTL_ScopedName *e, - idl_bool treat_as_ref) -{ - AST_Decl *d = 0; - - if (this->pd_base_home != 0) - { - d = this->pd_base_home->lookup_by_name (e, treat_as_ref); - } - - return d; -} - -// Look through supported interface list. -AST_Decl * -AST_Home::look_in_supported (UTL_ScopedName *e, - idl_bool treat_as_ref) -{ - AST_Decl *d = 0; - AST_Interface **is = 0; - long nis = -1; - - // Can't look in an interface which was not yet defined. - if (!this->is_defined ()) - { - idl_global->err ()->fwd_decl_lookup (this, - e); - return 0; - } - - // OK, loop through supported interfaces. - - // (Don't leave the inheritance hierarchy, no module or global ...) - // Find all and report ambiguous results as error. - - for (nis = this->n_supports (), is = this->supports (); - nis > 0; - nis--, is++) - { - d = (*is)->lookup_by_name (e, - treat_as_ref, - 0 /* not in parent */); - if (d != 0) - { - break; - } - } - - return d; -} - AST_Home * AST_Home::base_home (void) const { diff --git a/TAO/TAO_IDL/ast/ast_interface.cpp b/TAO/TAO_IDL/ast/ast_interface.cpp index 8c41d3f43d5..3c43841b2f5 100644 --- a/TAO/TAO_IDL/ast/ast_interface.cpp +++ b/TAO/TAO_IDL/ast/ast_interface.cpp @@ -91,12 +91,9 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #include "utl_err.h" #include "utl_identifier.h" #include "utl_indenter.h" -#include "utl_string.h" #include "global_extern.h" #include "nr_extern.h" -#include "ace/streams.h" - ACE_RCSID (ast, ast_interface, "$Id$") @@ -1481,76 +1478,6 @@ AST_Interface::redef_clash (void) return 0; } -// Look through inherited interfaces. -AST_Decl * -AST_Interface::look_in_inherited (UTL_ScopedName *e, - idl_bool treat_as_ref) -{ - AST_Decl *d = 0; - AST_Decl *d_before = 0; - AST_Interface **is = 0; - long nis = -1; - - // Can't look in an interface which was not yet defined. - if (!this->is_defined ()) - { - idl_global->err ()->fwd_decl_lookup (this, - e); - return 0; - } - - // OK, loop through inherited interfaces. - - // (Don't leave the inheritance hierarchy, no module or global ...) - // Find all and report ambiguous results as error. - - for (nis = this->n_inherits (), is = this->inherits (); - nis > 0; - nis--, is++) - { - d = (*is)->lookup_by_name (e, - treat_as_ref, - 0 /* not in parent */); - if (d != 0) - { - if (d_before == 0) - { - // First result found. - d_before = d; - } - else - { - // Conflict against further results? - if (d != d_before) - { - ACE_ERROR ((LM_ERROR, - "warning in %s line %d: ", - idl_global->filename ()->get_string (), - idl_global->lineno ())); - - e->dump (*ACE_DEFAULT_LOG_STREAM); - - ACE_ERROR ((LM_ERROR, - " is ambiguous in scope.\n" - "Found ")); - - d->name ()->dump (*ACE_DEFAULT_LOG_STREAM); - - ACE_ERROR ((LM_ERROR, - " and ")); - - d_before->name ()->dump (*ACE_DEFAULT_LOG_STREAM); - - ACE_ERROR ((LM_ERROR, - ".\n")); - } - } - } - } - - return d_before; -} - AST_Decl * AST_Interface::lookup_for_add (AST_Decl *d, idl_bool /* treat_as_ref */) diff --git a/TAO/TAO_IDL/ast/ast_module.cpp b/TAO/TAO_IDL/ast/ast_module.cpp index 707fb43f3fd..244521892aa 100644 --- a/TAO/TAO_IDL/ast/ast_module.cpp +++ b/TAO/TAO_IDL/ast/ast_module.cpp @@ -1000,7 +1000,7 @@ AST_Module::fe_add_constant (AST_Constant *t) { idl_global->err ()->redefinition_in_scope (t, d); - return 0; + return NULL; } } @@ -1633,21 +1633,6 @@ AST_Module::be_add_interface (AST_Interface *i, return 0; } -// Has this node been referenced here before? -idl_bool -AST_Module::referenced (AST_Decl *e, - Identifier *id) -{ - idl_bool refd = this->UTL_Scope::referenced (e, id); - - if (refd) - { - return I_TRUE; - } - - return this->look_in_previous (e->local_name ()) != 0; -} - void AST_Module::add_to_previous (AST_Module *m) { diff --git a/TAO/TAO_IDL/ast/ast_root.cpp b/TAO/TAO_IDL/ast/ast_root.cpp index 2325c2684cd..1cd6826c64d 100644 --- a/TAO/TAO_IDL/ast/ast_root.cpp +++ b/TAO/TAO_IDL/ast/ast_root.cpp @@ -230,7 +230,7 @@ AST_Root::destroy () if (d->node_type () == AST_Decl::NT_pre_defined) { - j = i + 1; + j = i; break; } diff --git a/TAO/TAO_IDL/ast/ast_valuetype.cpp b/TAO/TAO_IDL/ast/ast_valuetype.cpp index 8d5a06dc9e9..348d5dbbf4d 100644 --- a/TAO/TAO_IDL/ast/ast_valuetype.cpp +++ b/TAO/TAO_IDL/ast/ast_valuetype.cpp @@ -8,12 +8,9 @@ #include "utl_err.h" #include "utl_identifier.h" #include "utl_indenter.h" -#include "utl_string.h" #include "global_extern.h" #include "nr_extern.h" -#include "ace/streams.h" - ACE_RCSID (ast, ast_valuetype, "$Id$") @@ -134,76 +131,6 @@ AST_ValueType::will_have_factory (void) return I_FALSE; } -// Look through supported interface list. -AST_Decl * -AST_ValueType::look_in_supported (UTL_ScopedName *e, - idl_bool treat_as_ref) -{ - AST_Decl *d = 0; - AST_Decl *d_before = 0; - AST_Interface **is = 0; - long nis = -1; - - // Can't look in an interface which was not yet defined. - if (!this->is_defined ()) - { - idl_global->err ()->fwd_decl_lookup (this, - e); - return 0; - } - - // OK, loop through supported interfaces. - - // (Don't leave the inheritance hierarchy, no module or global ...) - // Find all and report ambiguous results as error. - - for (nis = this->n_supports (), is = this->supports (); - nis > 0; - nis--, is++) - { - d = (*is)->lookup_by_name (e, - treat_as_ref, - 0 /* not in parent */); - if (d != 0) - { - if (d_before == 0) - { - // First result found. - d_before = d; - } - else - { - // Conflict against further results? - if (d != d_before) - { - ACE_ERROR ((LM_ERROR, - "warning in %s line %d: ", - idl_global->filename ()->get_string (), - idl_global->lineno ())); - - e->dump (*ACE_DEFAULT_LOG_STREAM); - - ACE_ERROR ((LM_ERROR, - " is ambiguous in scope.\n" - "Found ")); - - d->name ()->dump (*ACE_DEFAULT_LOG_STREAM); - - ACE_ERROR ((LM_ERROR, - " and ")); - - d_before->name ()->dump (*ACE_DEFAULT_LOG_STREAM); - - ACE_ERROR ((LM_ERROR, - ".\n")); - } - } - } - } - - return d_before; -} - void AST_ValueType::destroy (void) { diff --git a/TAO/TAO_IDL/be/be_attribute.cpp b/TAO/TAO_IDL/be/be_attribute.cpp index b00d7d35941..652a768516c 100644 --- a/TAO/TAO_IDL/be/be_attribute.cpp +++ b/TAO/TAO_IDL/be/be_attribute.cpp @@ -25,8 +25,8 @@ #include "global_extern.h" -ACE_RCSID (be, - be_attribute, +ACE_RCSID (be, + be_attribute, "$Id$") be_attribute::be_attribute (void) @@ -77,15 +77,9 @@ be_attribute::be_attribute (idl_bool ro, be_operation_default_strategy (0)); this->set_strategy_ = bods; - // TAO_IDL generated attribute methods currently have an exception - // specification containing CORBA::SystemException. Make sure we - // generate a "tao/SystemException.h" include directive. - ACE_SET_BITS (idl_global->decls_seen_info_, - idl_global->decls_seen_masks.operation_seen_); - if (!this->imported () && !this->is_local ()) { - // For the return types of the two operations + // For the return types of the two operations // generated from this attribute. this->set_arg_seen_bit (be_type::narrow_from_decl (ft)); ACE_SET_BITS (idl_global->decls_seen_info_, diff --git a/TAO/TAO_IDL/be/be_codegen.cpp b/TAO/TAO_IDL/be/be_codegen.cpp index d1a72b65667..7cf18dcfe6e 100644 --- a/TAO/TAO_IDL/be/be_codegen.cpp +++ b/TAO/TAO_IDL/be/be_codegen.cpp @@ -462,7 +462,7 @@ TAO_CodeGen::start_server_header (const char *fname) if (be_global->gen_amh_classes ()) { this->gen_standard_include (this->server_header_, - "tao/Messaging/AMH_Response_Handler.h"); + "tao/PortableServer/AMH_Response_Handler.h"); } *this->server_header_ << be_nl << be_nl @@ -885,12 +885,6 @@ TAO_CodeGen::start_implementation_header (const char *fname) << "#pragma once\n" << "#endif /* ACE_LACKS_PRAGMA_ONCE */\n\n"; - if (ACE_BIT_ENABLED (idl_global->decls_seen_info_, - idl_global->decls_seen_masks.local_iface_seen_)) - { - *this->implementation_header_ << "#include \"tao/LocalObject.h\"\n\n"; - } - return 0; } @@ -1169,10 +1163,7 @@ TAO_CodeGen::end_server_skeletons (void) int TAO_CodeGen::end_anyop_source (void) { - if (!be_global->gen_tmplinst ()) - { - *this->anyop_source_ << "\n"; - } + *this->anyop_source_ << "\n\n"; return 0; } @@ -1383,24 +1374,19 @@ TAO_CodeGen::gen_stub_hdr_includes (void) this->gen_standard_include (this->client_header_, "tao/ORB.h"); - this->gen_cond_file_include ( - idl_global->decls_seen_masks.operation_seen_, - "tao/SystemException.h", - this->client_header_ - ); - - // Not needed at the moment, since UserException.h is pulled in by - // ORB.h, which is included in the stub header file. May change if - // ORB.h is rearranged to make a lighter include for applications. - // System exception throw spec for every operation may change soon. + // Not needed at the moment, since Exception.h is pulled in by ORB.h, + // included at the top of the stub header file. May change if ORB.h + // is rearranged to make a lighter include for applications. #if 0 + // System exception throw spec for every operation may change soon. // For IDL exception, we need full knowledge of CORBA::UserException. this->gen_cond_file_include ( - idl_global->decls_seen_masks.exception_seen_, - "tao/UserException.h", + idl_global->decls_seen_masks.operation_seen_ + | idl_global->decls_seen_masks.exception_seen_, + "tao/Exception.h", this->client_header_ ); -#endif /* 0 */ +#endif this->gen_standard_include (this->client_header_, "tao/Environment.h"); @@ -1570,22 +1556,6 @@ TAO_CodeGen::gen_stub_src_includes (void) "tao/Typecode.h"); } - // The UserException::_tao_{en,de}code() methods can throw a - // CORBA::MARSHAL exception so make sure that system exception is - // fully declared/defined by including "tao/SystemException.h". - // However, only include "tao/SystemException.h" if a user exception - // was encountered and if we're not already including it in the stub - // header. - if (ACE_BIT_ENABLED (idl_global->decls_seen_info_, - idl_global->decls_seen_masks.exception_seen_) - && ACE_BIT_DISABLED (idl_global->decls_seen_info_, - idl_global->decls_seen_masks.operation_seen_)) - { - this->gen_standard_include (this->client_stubs_, - "tao/SystemException.h"); - } - - // Includes whatever Any template classes that may be needed. this->gen_any_file_includes (); diff --git a/TAO/TAO_IDL/be/be_global.cpp b/TAO/TAO_IDL/be/be_global.cpp index 7d30f48bfd2..c4644d48969 100644 --- a/TAO/TAO_IDL/be/be_global.cpp +++ b/TAO/TAO_IDL/be/be_global.cpp @@ -83,8 +83,7 @@ BE_GlobalData::BE_GlobalData (void) lookup_strategy_ (TAO_PERFECT_HASH), void_type_ (0), ccmobject_ (0), - gen_anyop_files_ (I_FALSE), - do_ccm_preproc_ (I_TRUE) + gen_anyop_files_ (I_FALSE) { } @@ -993,18 +992,6 @@ BE_GlobalData::gen_anyop_files (idl_bool val) this->gen_anyop_files_ = val; } -idl_bool -BE_GlobalData::do_ccm_preproc (void) const -{ - return this->do_ccm_preproc_; -} - -void -BE_GlobalData::do_ccm_preproc (idl_bool val) -{ - this->do_ccm_preproc_ = val; -} - ACE_CString BE_GlobalData::spawn_options (void) { @@ -1369,6 +1356,11 @@ BE_GlobalData::parse_args (long &i, char **av) // generating Direct collocated stubs. be_global->gen_direct_collocation (1); } + else if (av[i][2] == 'v') + { + // enable OBV (Valuetype) support. + idl_global->obv_support (1); + } else if (av[i][2] == 'I') { size_t options = ACE_OS::strlen(av[i]) - 3; @@ -1451,34 +1443,34 @@ BE_GlobalData::parse_args (long &i, char **av) if (av[i][2] == 'a') { // suppress Any support - be_global->any_support (I_FALSE); + be_global->any_support (0); } else if (av[i][2] == 't') { // suppress typecode support // Anys must be suppressed as well - be_global->tc_support (I_FALSE); - be_global->any_support (I_FALSE); + be_global->tc_support (0); + be_global->any_support (0); } else if (av[i][2] == 'p') { // suppress generating Thru_POA collocated stubs - be_global->gen_thru_poa_collocation (I_FALSE); + be_global->gen_thru_poa_collocation (0); } else if (av[i][2] == 'd') { // suppress generating Direct collocated stubs - be_global->gen_direct_collocation (I_FALSE); + be_global->gen_direct_collocation (0); } else if (av[i][2] == 'c') { // suppress generating tie classes and files be_global->gen_tie_classes (0); } - else if (av[i][2] == 'm') + else if (av[i][2] == 'v') { - // disable IDL3 to IDL2 preprocessing. - be_global->do_ccm_preproc (I_FALSE); + // disable OBV (Valuetype) support + idl_global->obv_support (0); } else { @@ -1844,7 +1836,7 @@ BE_GlobalData::usage (void) const )); ACE_DEBUG (( LM_DEBUG, - ACE_TEXT (" -Sm\t\t\tdisable IDL3 equivalent IDL preprocessing") + ACE_TEXT (" -Sv\t\t\tdisable OBV (Valuetype) support") ACE_TEXT (" (enabled by default)\n") )); } diff --git a/TAO/TAO_IDL/be/be_interface.cpp b/TAO/TAO_IDL/be/be_interface.cpp index 58760041cfe..2856108bf60 100644 --- a/TAO/TAO_IDL/be/be_interface.cpp +++ b/TAO/TAO_IDL/be/be_interface.cpp @@ -520,7 +520,7 @@ be_interface::gen_stub_ctor (TAO_OutStream *os) << ")" << be_nl << ": "; - if (this->has_mixed_parentage_) + if (this->has_mixed_parentage_ && ! this->is_abstract ()) { *os << "ACE_NESTED_CLASS (CORBA, AbstractBase) (" << be_idt << be_idt << be_idt_nl @@ -553,7 +553,19 @@ be_interface::gen_stub_ctor (TAO_OutStream *os) *os << be_idt; } - if (!is_abstract_) + if (is_abstract_) + { + if (this->pd_n_inherits == 0) + { + *os << "ACE_NESTED_CLASS (CORBA, AbstractBase) (" + << be_idt << be_idt_nl + << "objref," << be_nl + << "_tao_collocated," << be_nl + << "servant" << be_uidt_nl + << ")" << be_uidt; + } + } + else { *os << "ACE_NESTED_CLASS (CORBA, Object) (" << be_idt << be_idt_nl @@ -1356,31 +1368,19 @@ be_interface::gen_collocated_skel_body (be_interface *derived, void be_interface::analyze_parentage (void) { - if (this->has_mixed_parentage_ != -1) - { - return; - } - this->has_mixed_parentage_ = 0; for (long i = 0; i < this->pd_n_inherits; ++i) { - be_interface *parent = - be_interface::narrow_from_decl (this->pd_inherits[i]); - - if (parent->is_abstract () || parent->has_mixed_parentage ()) + if (this->pd_inherits[i]->is_abstract ()) { this->has_mixed_parentage_ = 1; break; } } - - AST_Decl::NodeType nt = this->node_type (); - idl_bool can_be_mixed = nt == AST_Decl::NT_interface - || nt == AST_Decl::NT_component - || nt == AST_Decl::NT_home; - if (this->has_mixed_parentage_ == 1 && can_be_mixed) + if (this->has_mixed_parentage_ == 1 + && this->node_type () == AST_Decl::NT_interface) { be_global->mixed_parentage_interfaces.enqueue_tail (this); } @@ -1456,8 +1456,6 @@ be_interface::traverse_inheritance_graph ( // If we are doing a component, we check for a parent. if (intf->node_type () == AST_Decl::NT_component) { - (void) this->insert_non_dup (be_global->ccmobject ()); - AST_Component *base = AST_Component::narrow_from_decl (intf)->base_component (); @@ -1474,6 +1472,10 @@ be_interface::traverse_inheritance_graph ( abstract_paths_only); } } + else + { + (void) this->insert_non_dup (be_global->ccmobject ()); + } } (void) this->insert_non_dup (intf, abstract_paths_only); diff --git a/TAO/TAO_IDL/be/be_produce.cpp b/TAO/TAO_IDL/be/be_produce.cpp index 9936f760de0..4f1527cfcd8 100644 --- a/TAO/TAO_IDL/be/be_produce.cpp +++ b/TAO/TAO_IDL/be/be_produce.cpp @@ -121,22 +121,19 @@ BE_produce (void) BE_abort (); } - if (be_global->do_ccm_preproc ()) - { - // Make a pass over the AST and introduce - // CCM specific nodes. - be_visitor_ccm_pre_proc ccm_preproc_visitor (&ctx); + // Make a pass over the AST and introduce + // CCM specific nodes. + be_visitor_ccm_pre_proc ccm_preproc_visitor (&ctx); - if (root->accept (&ccm_preproc_visitor) == -1) - { - ACE_ERROR ((LM_ERROR, - "(%N:%l) be_produce - " - "CCM preprocessing for Root failed\n")); - BE_abort (); - } + if (root->accept (&ccm_preproc_visitor) == -1) + { + ACE_ERROR ((LM_ERROR, + "(%N:%l) be_produce - " + "CCM preprocessing for Root failed\n")); + BE_abort (); } - if (be_global->ami_call_back ()) + if (be_global->ami_call_back () == I_TRUE) { // Make a pass over the AST and introduce // AMI specific interfaces, methods and valuetypes. @@ -151,7 +148,7 @@ BE_produce (void) } } - if (be_global->gen_amh_classes ()) + if (be_global->gen_amh_classes () == I_TRUE) { // Make a pass over the AST and introduce // AMH specific code diff --git a/TAO/TAO_IDL/be/be_tmplinst.cpp b/TAO/TAO_IDL/be/be_tmplinst.cpp index 2edee73bf39..e14b08e765a 100644 --- a/TAO/TAO_IDL/be/be_tmplinst.cpp +++ b/TAO/TAO_IDL/be/be_tmplinst.cpp @@ -52,7 +52,7 @@ template class ACE_Unbounded_Queue_Iterator <be_interface_fwd *>; #pragma instantiate ACE_Unbounded_Queue <be_interface_fwd *> #pragma instantiate ACE_Unbounded_Queue_Iterator <be_interface_fwd *> -#elif defined (ACE_HAS_EXPLICIT_STATIC_TEMPLATE_MEMBER_INSTANTIATION) +#elif defined (__GNUC__) && (defined (_AIX) || defined (__hpux)) template class ACE_Singleton<TAO_CodeGen, ACE_SYNCH_RECURSIVE_MUTEX>; template class ACE_Singleton<TAO_OutStream_Factory,ACE_SYNCH_RECURSIVE_MUTEX>; template class ACE_Singleton<TAO_Visitor_Factory,ACE_SYNCH_RECURSIVE_MUTEX>; diff --git a/TAO/TAO_IDL/be/be_valuetype.cpp b/TAO/TAO_IDL/be/be_valuetype.cpp index 60445e0aebc..844bd5704ee 100644 --- a/TAO/TAO_IDL/be/be_valuetype.cpp +++ b/TAO/TAO_IDL/be/be_valuetype.cpp @@ -755,7 +755,7 @@ be_valuetype::traverse_supports_list_graphs ( { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_valuetype::" - "traverse_supports_list_graphs - " + "traverse_supports_graph_list - " "error generating entries\n"), -1); } @@ -809,7 +809,29 @@ be_valuetype::abstract_supports_helper (be_interface *, *os << "," << be_nl << "public virtual " << base->name (); +/* + if (base->is_nested ()) + { + UTL_Scope *parent_scope = base->defined_in (); + AST_Decl *parent_decl = ScopeAsDecl (parent_scope); + + *os << "ACE_NESTED_CLASS (" + << parent_decl->name () << ", " + << base->local_name () << ")"; + } + else + { + *os << base->local_name (); + } +*/ + return 0; +} +int +be_valuetype::gen_abstract_init_helper (be_interface *, + be_interface *, + TAO_OutStream *) +{ return 0; } diff --git a/TAO/TAO_IDL/be/be_visitor_amh_pre_proc.cpp b/TAO/TAO_IDL/be/be_visitor_amh_pre_proc.cpp index f557bb052c8..09aa699302e 100644 --- a/TAO/TAO_IDL/be/be_visitor_amh_pre_proc.cpp +++ b/TAO/TAO_IDL/be/be_visitor_amh_pre_proc.cpp @@ -569,6 +569,90 @@ be_visitor_amh_pre_proc::visit_operation (be_operation *node) return 0; } +// @@@ (JP) I think this can be removed. It is doing nothing +// that the generic visit_scope() is not doing. +int +be_visitor_amh_pre_proc::visit_scope (be_scope *node) +{ + // proceed if the number of members in our scope is greater than 0 + if (node->nmembers () > 0) + { + int number_of_elements = 0; + + { + // initialize an iterator to iterate thru our scope + for (UTL_ScopeActiveIterator si (node, UTL_Scope::IK_decls); + !si.is_done (); + si.next ()) + { + ++number_of_elements; + } + } + + AST_Decl **elements; + ACE_NEW_RETURN (elements, + AST_Decl *[number_of_elements], + -1); + + { + int position = 0; + // initialize an iterator to iterate thru our scope + for (UTL_ScopeActiveIterator si (node, UTL_Scope::IK_decls); + !si.is_done (); + si.next ()) + { + elements[position++] = si.item (); + } + } + + + int elem_number = 0; + + // continue until each element is visited + while (elem_number < number_of_elements) + { + AST_Decl *d = elements[elem_number]; + + if (!d) + { + delete [] elements; + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_scope::visit_scope - " + "bad node in this scope\n"), + -1); + + } + + be_decl *bd = be_decl::narrow_from_decl (d); + + // set the scope node as "node" in which the code is being + // generated so that elements in the node's scope can use it + // for code generation + this->ctx_->scope (node->decl ()); + + // set the node to be visited + this->ctx_->node (bd); + ++elem_number; + + + // Send the visitor. + if (bd == 0 || bd->accept (this) == -1) + { + delete [] elements; + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_scope::visit_scope - " + "codegen for scope failed\n"), + -1); + + } + } // end of while loop + + delete [] elements; + } // end of if + + return 0; +} + be_valuetype * be_visitor_amh_pre_proc::create_exception_holder (be_interface *node) { diff --git a/TAO/TAO_IDL/be/be_visitor_arg_traits.cpp b/TAO/TAO_IDL/be/be_visitor_arg_traits.cpp index 0eea91ba50e..3548c50705a 100644 --- a/TAO/TAO_IDL/be/be_visitor_arg_traits.cpp +++ b/TAO/TAO_IDL/be/be_visitor_arg_traits.cpp @@ -107,8 +107,6 @@ be_visitor_arg_traits::visit_interface (be_interface *node) if (node->seen_in_operation ()) { TAO_OutStream *os = this->ctx_->stream (); - idl_bool stub = (this->ctx_->state () == TAO_CodeGen::TAO_ROOT_CS); - BE_GlobalData *b = be_global; // This should be generated even for imported nodes. The ifdef guard prevents // multiple declarations. @@ -116,9 +114,8 @@ be_visitor_arg_traits::visit_interface (be_interface *node) *os << be_nl << be_nl << "ACE_TEMPLATE_SPECIALIZATION" << be_nl - << "class " - << (stub ? b->stub_export_macro () : b->skel_export_macro ()) - << " " << this->S_ << "Arg_Traits<" + << "class " << be_global->stub_export_macro () << " " + << this->S_ << "Arg_Traits<" << node->name () << ">" << be_idt_nl << ": public" << be_idt << be_idt_nl << "Object_" << this->S_ << "Arg_Traits_T<" << be_idt << be_idt_nl @@ -486,40 +483,7 @@ be_visitor_arg_traits::visit_array (be_array *node) // This should be generated even for imported nodes. The ifdef guard prevents // multiple declarations. -// os->gen_ifdef_macro (node->flat_name (), "arg_traits"); - - // Generate the array traits specialization definitions, - // guarded by #ifdef on unaliased array element type and length. - - ACE_CString unique; - be_type *bt = be_type::narrow_from_decl (node->base_type ()); - AST_Decl::NodeType nt = bt->node_type (); - - if (nt == AST_Decl::NT_typedef) - { - be_typedef *td = be_typedef::narrow_from_decl (bt); - unique = td->primitive_base_type ()->flat_name (); - } - else - { - unique = bt->flat_name (); - } - - char buf[NAMEBUFSIZE]; - - for (unsigned long i = 0; i < node->n_dims (); ++i) - { - ACE_OS::memset (buf, - '\0', - NAMEBUFSIZE); - ACE_OS::sprintf (buf, - "_%ld", - node->dims ()[i]->ev ()->u.ulval); - unique += buf; - } - - unique += "_traits"; - os->gen_ifdef_macro (unique.fast_rep ()); + os->gen_ifdef_macro (node->flat_name (), "arg_traits"); *os << be_nl << be_nl << "ACE_TEMPLATE_SPECIALIZATION" << be_nl diff --git a/TAO/TAO_IDL/be/be_visitor_argument/paramlist.cpp b/TAO/TAO_IDL/be/be_visitor_argument/paramlist.cpp index fbb5e7613cd..2fa4e527ac7 100644 --- a/TAO/TAO_IDL/be/be_visitor_argument/paramlist.cpp +++ b/TAO/TAO_IDL/be/be_visitor_argument/paramlist.cpp @@ -101,12 +101,11 @@ int be_visitor_args_paramlist::visit_argument (be_argument *node) *os << " _tao_forany_" << node->local_name () << " ("; *os << this->type_name (bt, "_dup"); *os << " ("; - + // This is to placate some compilers which have + // trouble with IN args that are multidimensional arrays. + //if (node->n_dims () > 1) cant do this here since dont have a be_array node if (this->direction () != AST_Argument::dir_IN) - { - *os << "(const ::" << bt->name () << "_slice *) "; - } - + *os << "(const ::" << bt->name () << "_slice *) "; *os << "this->"; *os << node->local_name () << "_));" << be_nl; *os << "(*parameter_list)[len].argument <<= _tao_forany_" ; diff --git a/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp b/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp index 9923d6f7ee9..f4097be8b7e 100644 --- a/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp @@ -276,7 +276,7 @@ int be_visitor_array_ch::visit_array (be_array *node) } else { - storage_class = "TAO_EXPORT_MACRO "; + storage_class = ""; } if (td != 0) diff --git a/TAO/TAO_IDL/be/be_visitor_array/array_ci.cpp b/TAO/TAO_IDL/be/be_visitor_array/array_ci.cpp index a0ef398247a..2ffa66396f2 100644 --- a/TAO/TAO_IDL/be/be_visitor_array/array_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_array/array_ci.cpp @@ -195,7 +195,7 @@ int be_visitor_array_ci::visit_array (be_array *node) << fname << "," << be_nl << fname << "_slice," << be_nl << fname << "_tag" << be_uidt_nl - << ">::free ("<< be_idt_nl + << ">::tao_free ("<< be_idt_nl << fname << "_slice * _tao_slice" << be_uidt_nl << ")" << be_uidt_nl << "{" << be_idt_nl @@ -210,7 +210,7 @@ int be_visitor_array_ci::visit_array (be_array *node) << fname << "," << be_nl << fname << "_slice," << be_nl << fname << "_tag" << be_uidt_nl - << ">::dup (" << be_idt_nl + << ">::tao_dup (" << be_idt_nl << "const " << fname << "_slice * _tao_slice" << be_uidt_nl << ")" << be_uidt_nl << "{" << be_idt_nl @@ -225,7 +225,7 @@ int be_visitor_array_ci::visit_array (be_array *node) << fname << "," << be_nl << fname << "_slice," << be_nl << fname << "_tag" << be_uidt_nl - << ">::copy (" << be_idt_nl + << ">::tao_copy (" << be_idt_nl << fname << "_slice * _tao_to," << be_nl << "const " << fname << "_slice * _tao_from" << be_uidt_nl << ")" << be_uidt_nl @@ -241,7 +241,7 @@ int be_visitor_array_ci::visit_array (be_array *node) << fname << "," << be_nl << fname << "_slice," << be_nl << fname << "_tag" << be_uidt_nl - << ">::alloc (void)" << be_uidt_nl + << ">::tao_alloc (void)" << be_uidt_nl << "{" << be_idt_nl << "return " << fname << "_alloc ();" << be_uidt_nl << "}"; diff --git a/TAO/TAO_IDL/be/be_visitor_ccm_pre_proc.cpp b/TAO/TAO_IDL/be/be_visitor_ccm_pre_proc.cpp index 826b7082b6e..666e3e0b896 100644 --- a/TAO/TAO_IDL/be/be_visitor_ccm_pre_proc.cpp +++ b/TAO/TAO_IDL/be/be_visitor_ccm_pre_proc.cpp @@ -58,8 +58,6 @@ be_exception *EXCEPS[N_EXCEPS]; be_visitor_ccm_pre_proc::be_visitor_ccm_pre_proc (be_visitor_context *ctx) : be_visitor_scope (ctx), module_id_ ("Components"), - connection_ (0), - connections_ (0), cookie_ (0), already_connected_ (0), invalid_connection_ (0), @@ -358,15 +356,6 @@ be_visitor_ccm_pre_proc::gen_uses (be_component *node) } else { - if (this->create_uses_multiple_stuff (node, pd) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_ccm_pre_proc::" - "gen_uses - " - "create_uses_multiple_stuff failed\n"), - -1); - } - if (this->gen_connect_multiple (node, pd) == -1) { ACE_ERROR_RETURN ((LM_ERROR, @@ -1466,152 +1455,6 @@ be_visitor_ccm_pre_proc::lookup_one_exception (be_component *node, } int -be_visitor_ccm_pre_proc::create_uses_multiple_stuff ( - be_component *node, - AST_Component::port_description *pd - ) -{ - if (this->create_uses_multiple_struct (node, pd) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_ccm_pre_proc::" - "create_uses_multiple_stuff - " - "create_uses_multiple_struct failed\n"), - -1); - } - - if (this->create_uses_multiple_sequence (node, pd) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_ccm_pre_proc::" - "create_uses_multiple_stuff - " - "create_uses_multiple_sequence failed\n"), - -1); - } - - return 0; -} - -int -be_visitor_ccm_pre_proc::create_uses_multiple_struct ( - be_component *node, - AST_Component::port_description *pd - ) -{ - UTL_ScopedName *full_name = - this->create_scoped_name (0, - pd->id->get_string (), - "Connection", - node); - ACE_NEW_RETURN (this->connection_, - be_structure (0, - 0, - 0), - -1); - this->connection_->set_defined_in (node); - this->connection_->set_imported (node->imported ()); - this->connection_->set_name (full_name); - - Identifier o_id ("objref"); - UTL_ScopedName o_sn (&o_id, - 0); - AST_Field *m_objref = 0; - ACE_NEW_RETURN (m_objref, - be_field (pd->impl, - &o_sn), - -1); - o_id.destroy (); - - if (this->connection_->be_add_field (m_objref) == 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_ccm_pre_proc::" - "create_uses_multiple_struct - " - "be_add_field failed\n"), - -1); - } - - Identifier v_id ("ck"); - UTL_ScopedName v_sn (&v_id, - 0); - AST_Field *m_ck = 0; - ACE_NEW_RETURN (m_ck, - be_field (this->cookie_, - &v_sn), - -1); - - if (this->connection_->be_add_field (m_ck) == 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_ccm_pre_proc::" - "create_uses_multiple_struct - " - "be_add_field failed\n"), - -1); - } - - if (node->be_add_structure (this->connection_) == 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_ccm_pre_proc::" - "create_uses_multiple_struct - " - "be_add_structure failed\n"), - -1); - } - - return 0; -} - -int -be_visitor_ccm_pre_proc::create_uses_multiple_sequence ( - be_component *node, - AST_Component::port_description *pd - ) -{ - ACE_UINT64 bound = 0; - ACE_NEW_RETURN ( - this->connections_, - be_sequence ( - idl_global->gen ()->create_expr ( - bound, - AST_Expression::EV_ulong - ), - this->connection_, - 0, - 0, - 0 - ), - -1 - ); - - UTL_ScopedName *sn = - this->create_scoped_name (0, - pd->id->get_string (), - "Connections", - node); - AST_Typedef *td = 0; - ACE_NEW_RETURN (td, - be_typedef (this->connections_, - 0, - 0, - 0), - -1); - td->set_defined_in (node); - td->set_imported (node->imported ()); - td->set_name (sn); - - if (node->be_add_typedef (td) == 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_ccm_pre_proc::" - "create_uses_multiple_sequence - " - "be_add_typedef failed\n"), - -1); - } - - return 0; -} - -int be_visitor_ccm_pre_proc::create_event_consumer (be_eventtype *node) { AST_Interface *event_consumer = 0; @@ -1624,11 +1467,6 @@ be_visitor_ccm_pre_proc::create_event_consumer (be_eventtype *node) "Consumer", ScopeAsDecl (node->defined_in ())); - // We're at global scope here so we need to fool the scope stack - // for a minute so the correct repo id can be calculated at - // interface construction time. - idl_global->scopes ().push (node->defined_in ()); - if (node->n_inherits () == 0 || node->inherits ()[0]->node_type () == AST_Decl::NT_valuetype) { @@ -1639,13 +1477,13 @@ be_visitor_ccm_pre_proc::create_event_consumer (be_eventtype *node) &parent_local_name); UTL_NameList parent_list (&parent_full_name, 0); - FE_InterfaceHeader header (consumer_name, + FE_InterfaceHeader header (0, &parent_list, I_FALSE, I_FALSE, I_TRUE); ACE_NEW_RETURN (event_consumer, - be_interface (header.name (), + be_interface (0, header.inherits (), header.n_inherits (), header.inherits_flat (), @@ -1676,13 +1514,13 @@ be_visitor_ccm_pre_proc::create_event_consumer (be_eventtype *node) parent_full_name->nconc (parent_local_name); UTL_NameList parent_list (parent_full_name, 0); - FE_InterfaceHeader header (consumer_name, + FE_InterfaceHeader header (0, &parent_list, I_FALSE, I_FALSE, I_TRUE); ACE_NEW_RETURN (event_consumer, - be_interface (header.name (), + be_interface (0, header.inherits (), header.n_inherits (), header.inherits_flat (), @@ -1693,21 +1531,9 @@ be_visitor_ccm_pre_proc::create_event_consumer (be_eventtype *node) parent_full_name->destroy (); } - // Back to reality. - idl_global->scopes ().pop (); - event_consumer->set_defined_in (s); event_consumer->set_imported (node->imported ()); event_consumer->set_name (consumer_name); - - // Set repo id to 0, so it will be recomputed on the next access, - // and set the prefix to the eventtype's prefix. All this is - // necessary in case the eventtype's prefix was modified after - // its declaration. We assume 'implied IDL' means that the - // derived event consumer interface should have the same prefix. - event_consumer->repoID (0); - event_consumer->prefix (const_cast<char*> (node->prefix ())); - be_type::narrow_from_decl (event_consumer)->gen_fwd_helper_name (); m->be_add_interface (event_consumer); return this->gen_push_op (node, diff --git a/TAO/TAO_IDL/be/be_visitor_component/component.cpp b/TAO/TAO_IDL/be/be_visitor_component/component.cpp index 70b53838e1f..80bf5a90a14 100644 --- a/TAO/TAO_IDL/be/be_visitor_component/component.cpp +++ b/TAO/TAO_IDL/be/be_visitor_component/component.cpp @@ -45,11 +45,16 @@ be_visitor_component::visit_attribute (be_attribute *node) switch (this->ctx_->state ()) { - case TAO_CodeGen::TAO_INTERFACE_CH: + case TAO_CodeGen::TAO_ROOT_CH: + break; case TAO_CodeGen::TAO_ROOT_CS: + break; case TAO_CodeGen::TAO_ROOT_SH: + break; case TAO_CodeGen::TAO_ROOT_IH: + break; case TAO_CodeGen::TAO_ROOT_SS: + break; case TAO_CodeGen::TAO_ROOT_IS: break; default: @@ -84,7 +89,7 @@ be_visitor_component::visit_operation (be_operation *node) { // These first two cases may have the context state changed // by a strategy, so we use the visitor factory below. - case TAO_CodeGen::TAO_INTERFACE_CH: + case TAO_CodeGen::TAO_ROOT_CH: ctx.state (TAO_CodeGen::TAO_OPERATION_CH); break; case TAO_CodeGen::TAO_ROOT_CS: @@ -218,7 +223,7 @@ be_visitor_component::visit_structure (be_structure *node) switch (this->ctx_->state ()) { - case TAO_CodeGen::TAO_INTERFACE_CH: + case TAO_CodeGen::TAO_ROOT_CH: { be_visitor_structure_ch visitor (&ctx); status = node->accept (&visitor); @@ -287,7 +292,7 @@ be_visitor_component::visit_typedef (be_typedef *node) switch (this->ctx_->state ()) { - case TAO_CodeGen::TAO_INTERFACE_CH: + case TAO_CodeGen::TAO_ROOT_CH: { be_visitor_typedef_ch visitor (&ctx); status = node->accept (&visitor); diff --git a/TAO/TAO_IDL/be/be_visitor_component/component_ch.cpp b/TAO/TAO_IDL/be/be_visitor_component/component_ch.cpp index c2f85d715ff..b168399f32d 100644 --- a/TAO/TAO_IDL/be/be_visitor_component/component_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_component/component_ch.cpp @@ -153,21 +153,6 @@ be_visitor_component_ch::visit_component (be_component *node) *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl << "// " << __FILE__ << ":" << __LINE__; - if (! node->is_abstract ()) - { - node->analyze_parentage (); - } - - // If we inherit from both CORBA::Object and CORBA::AbstractBase, - // we have to override _add_ref() to avoid ambiguity. A comopnent - // can have mixed parentage if it supports an abstract or mixed- - // parentage interface. - if (node->has_mixed_parentage ()) - { - *os << be_nl << be_nl - << "virtual void _add_ref (void);"; - } - *os << be_nl << be_nl << "virtual CORBA::Boolean _is_a (" << be_idt << be_idt_nl << "const char *type_id" << be_nl diff --git a/TAO/TAO_IDL/be/be_visitor_component/component_cs.cpp b/TAO/TAO_IDL/be/be_visitor_component/component_cs.cpp index cc46761452b..f35f7eab081 100644 --- a/TAO/TAO_IDL/be/be_visitor_component/component_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_component/component_cs.cpp @@ -68,7 +68,7 @@ be_visitor_component_cs::visit_component (be_component *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION " << be_nl << node->name () << "_ptr" << be_nl - << "TAO::Objref_Traits<" << node->name () << ">::duplicate (" + << "TAO::Objref_Traits<" << node->name () << ">::tao_duplicate (" << be_idt << be_idt_nl << node->name () << "_ptr p" << be_uidt_nl << ")" << be_uidt_nl @@ -79,7 +79,7 @@ be_visitor_component_cs::visit_component (be_component *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION " << be_nl << "void" << be_nl - << "TAO::Objref_Traits<" << node->name () << ">::release (" + << "TAO::Objref_Traits<" << node->name () << ">::tao_release (" << be_idt << be_idt_nl << node->name () << "_ptr p" << be_uidt_nl << ")" << be_uidt_nl @@ -90,7 +90,7 @@ be_visitor_component_cs::visit_component (be_component *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION " << be_nl << node->name () << "_ptr" << be_nl - << "TAO::Objref_Traits<" << node->name () << ">::nil (void)" + << "TAO::Objref_Traits<" << node->name () << ">::tao_nil (void)" << be_nl << "{" << be_idt_nl << "return " << node->name () << "::_nil ();" << be_uidt_nl @@ -99,7 +99,7 @@ be_visitor_component_cs::visit_component (be_component *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION " << be_nl << "CORBA::Boolean" << be_nl - << "TAO::Objref_Traits<" << node->name () << ">::marshal (" + << "TAO::Objref_Traits<" << node->name () << ">::tao_marshal (" << be_idt << be_idt_nl << node->name () << "_ptr p," << be_nl << "TAO_OutputCDR & cdr" << be_uidt_nl @@ -109,29 +109,6 @@ be_visitor_component_cs::visit_component (be_component *node) << "}"; } - if (node->has_mixed_parentage ()) - { - *os << be_nl << be_nl - << "void" << be_nl - << "CORBA::release (" - << node->name () - << "_ptr p)" << be_nl - << "{" << be_idt_nl - << "CORBA::AbstractBase_ptr abs = p;" << be_nl - << "CORBA::release (abs);" << be_uidt_nl - << "}"; - - *os << be_nl << be_nl - << "CORBA::Boolean" << be_nl - << "CORBA::is_nil (" - << node->name () - << "_ptr p)" << be_nl - << "{" << be_idt_nl - << "CORBA::Object_ptr obj = p;" << be_nl - << "return CORBA::is_nil (obj);" << be_uidt_nl - << "}"; - } - // Generate the proxy broker factory function pointer definition. *os << be_nl << be_nl << "// Function pointer for collocation factory initialization." @@ -195,16 +172,6 @@ be_visitor_component_cs::visit_component (be_component *node) << "}" << be_nl << be_nl; } - if (node->has_mixed_parentage ()) - { - *os << "void" << be_nl - << node->name () << "::_add_ref (void)" << be_nl - << "{" << be_idt_nl - << "this->ACE_NESTED_CLASS (CORBA, Object)::_add_ref ();" - << be_uidt_nl - << "}" << be_nl << be_nl; - } - // The _narrow method. *os << node->full_name () << "_ptr" << be_nl << node->full_name () << "::_narrow (" << be_idt << be_idt_nl diff --git a/TAO/TAO_IDL/be/be_visitor_component/component_sh.cpp b/TAO/TAO_IDL/be/be_visitor_component/component_sh.cpp index 146ae4a0524..107adfc34af 100644 --- a/TAO/TAO_IDL/be/be_visitor_component/component_sh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_component/component_sh.cpp @@ -83,8 +83,7 @@ be_visitor_component_sh::visit_component (be_component *node) class_name += node->local_name (); } - *os << be_nl << be_nl - << "// TAO_IDL - Generated from" << be_nl + *os << "// TAO_IDL - Generated from" << be_nl << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; // Generate the skeleton class name. diff --git a/TAO/TAO_IDL/be/be_visitor_field/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_field/cdr_op_cs.cpp index 66bf273b6b2..e2b980bd77e 100644 --- a/TAO/TAO_IDL/be/be_visitor_field/cdr_op_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_field/cdr_op_cs.cpp @@ -282,7 +282,7 @@ be_visitor_field_cdr_op_cs::visit_interface (be_interface *node) } else { - *os << "TAO::Objref_Traits<" << node->name () << ">::marshal (" + *os << "TAO::Objref_Traits<" << node->name () << ">::tao_marshal (" << be_idt << be_idt_nl << "_tao_aggregate." << f->local_name () << ".in ()," << be_nl << "strm" << be_uidt_nl @@ -362,7 +362,7 @@ be_visitor_field_cdr_op_cs::visit_interface_fwd (be_interface_fwd *node) *os << parent->name () << "::"; } - *os << "TAO::Objref_Traits<" << node->name () << ">::marshal (" + *os << "TAO::Objref_Traits<" << node->name () << ">::tao_marshal (" << be_idt << be_idt_nl << "_tao_aggregate." << f->local_name () << ".in ()," << be_nl << "strm" << be_uidt_nl diff --git a/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_sh.cpp b/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_sh.cpp index b6863cc1822..85503801aad 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_sh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_sh.cpp @@ -129,7 +129,7 @@ be_visitor_interface_direct_proxy_impl_sh::gen_abstract_ops_helper ( TAO_OutStream *os ) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -149,7 +149,7 @@ be_visitor_interface_direct_proxy_impl_sh::gen_abstract_ops_helper ( { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_interface_thru_poa_proxy_" - "impl_sh::gen_abstract_ops_helper - " + "impl_sh::abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp b/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp index be617ef34ce..1986eae1270 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp @@ -63,7 +63,7 @@ be_visitor_interface_direct_proxy_impl_ss::gen_abstract_ops_helper ( TAO_OutStream *os ) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -83,7 +83,7 @@ be_visitor_interface_direct_proxy_impl_ss::gen_abstract_ops_helper ( { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_interface_direct_proxy" - "_impl_ss::gen_abstract_ops_helper - " + "_impl_ss::abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interceptors_ss.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interceptors_ss.cpp index a040a8a5e89..3ffceb381fc 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interceptors_ss.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interceptors_ss.cpp @@ -90,7 +90,7 @@ be_visitor_interface_interceptors_ss::gen_abstract_ops_helper ( TAO_OutStream *os ) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -110,7 +110,7 @@ be_visitor_interface_interceptors_ss::gen_abstract_ops_helper ( { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_interface_interceptors_ss::" - "gen_abstract_ops_helper - " + "abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface.cpp index b02cd9a48e1..c9ae586fb1d 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface.cpp @@ -116,13 +116,10 @@ be_visitor_interface::visit_scope (be_scope *node) return 0; } - // 'abstract_paths_only' arg is FALSE here because we want to traverse - // through concrete parents to get to all the abstract ones. The helper - // will do nothing unless the base interface passed to it is abstract. int status = intf->traverse_inheritance_graph (helper, this->ctx_->stream (), - I_FALSE); + I_TRUE); if (status == -1) { diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp index 675f9e648d5..a0e3ce9f913 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp @@ -213,7 +213,8 @@ be_visitor_interface_ch::visit_interface (be_interface *node) } // If we inherit from both CORBA::Object and CORBA::AbstractBase, - // we have to override _add_ref() to avoid ambiguity. + // we have to override _add_ref() to avoid ambiguity, because it is + // called in _tao_Queryinterface(). if (node->has_mixed_parentage ()) { *os << "virtual void _add_ref (void);" << be_nl << be_nl; @@ -378,7 +379,7 @@ be_visitor_interface_ch::gen_abstract_ops_helper (be_interface *node, be_interface *base, TAO_OutStream *os) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -397,7 +398,7 @@ be_visitor_interface_ch::gen_abstract_ops_helper (be_interface *node, { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_interface::" - "gen_abstract_ops_helper - " + "abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp index 071136f1ee2..dbed26ff19a 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp @@ -67,7 +67,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION" << be_nl << node->name () << "_ptr" << be_nl - << "TAO::Objref_Traits<" << node->name () << ">::duplicate (" + << "TAO::Objref_Traits<" << node->name () << ">::tao_duplicate (" << be_idt << be_idt_nl << node->name () << "_ptr p" << be_uidt_nl << ")" << be_uidt_nl @@ -78,7 +78,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION" << be_nl << "void" << be_nl - << "TAO::Objref_Traits<" << node->name () << ">::release (" + << "TAO::Objref_Traits<" << node->name () << ">::tao_release (" << be_idt << be_idt_nl << node->name () << "_ptr p" << be_uidt_nl << ")" << be_uidt_nl @@ -89,7 +89,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION" << be_nl << node->name () << "_ptr" << be_nl - << "TAO::Objref_Traits<" << node->name () << ">::nil (void)" + << "TAO::Objref_Traits<" << node->name () << ">::tao_nil (void)" << be_nl << "{" << be_idt_nl << "return " << node->name () << "::_nil ();" << be_uidt_nl @@ -98,7 +98,7 @@ be_visitor_interface_cs::visit_interface (be_interface *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION" << be_nl << "CORBA::Boolean" << be_nl - << "TAO::Objref_Traits<" << node->name () << ">::marshal (" + << "TAO::Objref_Traits<" << node->name () << ">::tao_marshal (" << be_idt << be_idt_nl << node->name () << "_ptr p," << be_nl << "TAO_OutputCDR & cdr" << be_uidt_nl @@ -562,7 +562,7 @@ be_visitor_interface_cs::gen_abstract_ops_helper (be_interface *node, be_interface *base, TAO_OutStream *os) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -581,7 +581,7 @@ be_visitor_interface_cs::gen_abstract_ops_helper (be_interface *node, { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_interface_cs::" - "gen_abstract_ops_helper - " + "abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_ih.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_ih.cpp index 7bb033fb1df..42246e077a4 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ih.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ih.cpp @@ -77,16 +77,7 @@ be_visitor_interface_ih::visit_interface (be_interface *node) *os << node->full_skel_name (); } - *os << ", public virtual "; - - if (node->is_local ()) - { - *os << "TAO_Local_RefCounted_Object"; - } - else - { - *os << "PortableServer::RefCountServantBase"; - } + *os << ", public virtual PortableServer::RefCountServantBase"; *os << be_nl << "{" << be_nl @@ -95,7 +86,7 @@ be_visitor_interface_ih::visit_interface (be_interface *node) << be_global->impl_class_prefix () << namebuf << be_global->impl_class_suffix () << " (void);" << be_nl << be_nl; - if (be_global->gen_copy_ctor () && !node->is_local ()) + if (be_global->gen_copy_ctor ()) { *os << "//Copy Constructor"<<be_nl << be_global->impl_class_prefix () << namebuf diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_is.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_is.cpp index fa25566ca54..ed87e053a6f 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_is.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_is.cpp @@ -76,7 +76,7 @@ be_visitor_interface_is::visit_interface (be_interface *node) *os << "{" <<be_nl; *os << "}" << be_nl << be_nl; - if (be_global->gen_copy_ctor () && !node->is_local ()) + if (be_global->gen_copy_ctor ()) { *os << "//Implementation Skeleton Copy Constructor" << be_nl; @@ -88,7 +88,7 @@ be_visitor_interface_is::visit_interface (be_interface *node) << be_global->impl_class_suffix () << "& rhs)" << be_idt_nl << ": TAO_Abstract_ServantBase (rhs)," << be_nl << " TAO_ServantBase (rhs)"; - + if (node->traverse_inheritance_graph (be_interface::copy_ctor_helper, os) == -1) @@ -99,22 +99,19 @@ be_visitor_interface_is::visit_interface (be_interface *node) -1); } - if (!node->is_local ()) + *os << "," << be_nl; + + if (node->is_nested ()) + { + be_decl *scope; + scope = be_scope::narrow_from_scope (node->defined_in ())->decl (); + + *os << " ACE_NESTED_CLASS (POA_" << scope->name () << ", " + << node->local_name () << ") (rhs)"; + } + else { - *os << "," << be_nl; - - if (node->is_nested ()) - { - be_decl *scope; - scope = be_scope::narrow_from_scope (node->defined_in ())->decl (); - - *os << " ACE_NESTED_CLASS (POA_" << scope->name () << ", " - << node->local_name () << ") (rhs)"; - } - else - { - *os << " " << node->full_skel_name () << " (rhs)"; - } + *os << " " << node->full_skel_name () << " (rhs)"; } *os << be_uidt_nl diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp index e8d950f4d1f..1e798193964 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp @@ -39,221 +39,225 @@ int be_visitor_interface_sh::visit_interface (be_interface *node) { if (node->srv_hdr_gen () - || node->imported () - || node->is_abstract ()) + || node->imported ()) { return 0; } - // If this node is a AMH-RH node, then generate code for it - if (node->is_local ()) + // For abstract interfaces, we just generated the collocation stuff + // (see below). + if (! node->is_abstract ()) { - if (this->is_amh_rh_node (node)) - { - // Create amh_rh_visitors. - be_visitor_amh_rh_interface_sh amh_rh_intf (this->ctx_); - amh_rh_intf.visit_interface (node); - } - - return 0; - } - - if (this->generate_amh_classes (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_interface_sh::" - "visit_interface - " - "codegen for AMH classes failed\n"), - -1); - } - - TAO_OutStream *os = this->ctx_->stream (); - ACE_CString class_name; - - // We shall have a POA_ prefix only if we are at the topmost level. - if (!node->is_nested ()) - { - // We are outermost. - class_name += "POA_"; - class_name += node->local_name (); - } - else - { - class_name += node->local_name (); - } - - *os << be_nl << be_nl - << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - // Generate the skeleton class name. - *os << "class " << class_name.c_str () << ";" << be_nl; - - // Generate the _ptr declaration. - *os << "typedef " << class_name.c_str () << " *" << class_name.c_str () - << "_ptr;" << be_nl << be_nl; - - // Forward class declarations. - if (be_global->gen_thru_poa_collocation ()) - { - *os << "class " << node->thru_poa_proxy_impl_name () << ";" << be_nl; - } - - if (be_global->gen_direct_collocation ()) - { - *os << "class " << node->direct_proxy_impl_name () << ";" << be_nl; - } - - if (be_global->gen_thru_poa_collocation () - || be_global->gen_direct_collocation ()) - { - *os << "class " << node->strategized_proxy_broker_name () - << ";" << be_nl; - } - - *os << be_nl; - - // Now generate the class definition. - *os << "class " << be_global->skel_export_macro () - << " " << class_name.c_str () << be_idt_nl << ": " << be_idt; - - long n_parents = node->n_inherits (); - AST_Interface *parent = 0; - int has_concrete_parent = 0; - - for (int i = 0; i < n_parents; ++i) - { - parent = node->inherits ()[i]; - - if (parent->is_abstract ()) - { - continue; - } - - if (has_concrete_parent == 1) - { - *os << "," << be_nl; - } - - *os << "public virtual " << "POA_" - << parent->name (); - - has_concrete_parent = 1; - } - - if (has_concrete_parent == 0) - { - // We don't inherit from another user defined object, hence our - // base class is the ServantBase class. - *os << "public virtual PortableServer::ServantBase"; - } - - *os << be_uidt << be_uidt_nl - << "{" << be_nl - << "protected:" << be_idt_nl; - - // Default constructor. - *os << class_name.c_str () << " (void);" << be_uidt_nl << be_nl - << "public:" << be_idt_nl; - - // Some useful typedefs. - *os << "// Useful for template programming." << be_nl - << "typedef ::" << node->name () << " _stub_type;" << be_nl - << "typedef ::" << node->name () << "_ptr _stub_ptr_type;" << be_nl - << "typedef ::" << node->name () << "_var _stub_var_type;" - << be_nl << be_nl; - - // Copy constructor and destructor. - *os << class_name.c_str () << " (const " - << class_name.c_str () << "& rhs);" << be_nl - << "virtual ~" << class_name.c_str () << " (void);" << be_nl << be_nl; - - // _is_a - *os << "virtual CORBA::Boolean _is_a (" << be_idt << be_idt_nl - << "const char* logical_type_id" << be_nl - << "ACE_ENV_ARG_DECL_WITH_DEFAULTS" << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // _downcast - *os << "virtual void* _downcast (" << be_idt << be_idt_nl - << "const char* logical_type_id" << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _is_a method. - *os << "static void _is_a_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest &req," << be_nl - << "void *servant," << be_nl - << "void *servant_upcall" << be_nl - << "ACE_ENV_ARG_DECL" << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _non_existent method. - *os << "static void _non_existent_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest &req," << be_nl - << "void *servant," << be_nl - << "void *servant_upcall" << be_nl - << "ACE_ENV_ARG_DECL" << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _interface method. - *os << "static void _interface_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest &req," << be_nl - << "void *servant," << be_nl - << "void *servant_upcall" << be_nl - << "ACE_ENV_ARG_DECL" << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _component method. - *os << "static void _component_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest &req," << be_nl - << "void *obj," << be_nl - << "void *servant_upcall" << be_nl - << "ACE_ENV_ARG_DECL" << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add the dispatch method. - *os << "virtual void _dispatch (" << be_idt << be_idt_nl - << "TAO_ServerRequest &req," << be_nl - << "void *_servant_upcall" << be_nl - << "ACE_ENV_ARG_DECL" << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - this->this_method (node); - - // The _interface_repository_id method. - *os << be_nl - << "virtual const char* _interface_repository_id " - << "(void) const;"; - - // Generate code for elements in the scope (e.g., operations). - if (this->visit_scope (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_interface_sh::" - "visit_interface - " - "codegen for scope failed\n"), - -1); - } - - // Generate skeletons for operations of our base classes. These - // skeletons just cast the pointer to the appropriate type - // before invoking the call. - int status = - node->traverse_inheritance_graph ( - be_interface::gen_skel_helper, - os - ); - - if (status == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_interface_sh::" - "visit_interface - " - "inheritance graph traversal failed\n"), - -1); - } - - *os << be_uidt_nl << "};"; + // If this node is a AMH-RH node, then generate code for it + if (node->is_local ()) + { + if (this->is_amh_rh_node (node)) + { + // Create amh_rh_visitors. + be_visitor_amh_rh_interface_sh amh_rh_intf (this->ctx_); + amh_rh_intf.visit_interface (node); + } + + return 0; + } + + if (this->generate_amh_classes (node) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "be_visitor_interface_sh::" + "visit_interface - " + "codegen for AMH classes failed\n"), + -1); + } + + TAO_OutStream *os = this->ctx_->stream (); + ACE_CString class_name; + + // We shall have a POA_ prefix only if we are at the topmost level. + if (!node->is_nested ()) + { + // We are outermost. + class_name += "POA_"; + class_name += node->local_name (); + } + else + { + class_name += node->local_name (); + } + + *os << be_nl << be_nl + << "// TAO_IDL - Generated from" << be_nl + << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; + + // Generate the skeleton class name. + *os << "class " << class_name.c_str () << ";" << be_nl; + + // Generate the _ptr declaration. + *os << "typedef " << class_name.c_str () << " *" << class_name.c_str () + << "_ptr;" << be_nl << be_nl; + + // Forward class declarations. + if (be_global->gen_thru_poa_collocation ()) + { + *os << "class " << node->thru_poa_proxy_impl_name () << ";" << be_nl; + } + + if (be_global->gen_direct_collocation ()) + { + *os << "class " << node->direct_proxy_impl_name () << ";" << be_nl; + } + + if (be_global->gen_thru_poa_collocation () + || be_global->gen_direct_collocation ()) + { + *os << "class " << node->strategized_proxy_broker_name () + << ";" << be_nl; + } + + *os << be_nl; + + // Now generate the class definition. + *os << "class " << be_global->skel_export_macro () + << " " << class_name.c_str () << be_idt_nl << ": " << be_idt; + + long n_parents = node->n_inherits (); + AST_Interface *parent = 0; + int has_concrete_parent = 0; + + for (int i = 0; i < n_parents; ++i) + { + parent = node->inherits ()[i]; + + if (parent->is_abstract ()) + { + continue; + } + + if (has_concrete_parent == 1) + { + *os << "," << be_nl; + } + + *os << "public virtual " << "POA_" + << parent->name (); + + has_concrete_parent = 1; + } + + if (has_concrete_parent == 0) + { + // We don't inherit from another user defined object, hence our + // base class is the ServantBase class. + *os << "public virtual PortableServer::ServantBase"; + } + + *os << be_uidt << be_uidt_nl + << "{" << be_nl + << "protected:" << be_idt_nl; + + // Default constructor. + *os << class_name.c_str () << " (void);" << be_uidt_nl << be_nl + << "public:" << be_idt_nl; + + // Some useful typedefs. + *os << "// Useful for template programming." << be_nl + << "typedef ::" << node->name () << " _stub_type;" << be_nl + << "typedef ::" << node->name () << "_ptr _stub_ptr_type;" << be_nl + << "typedef ::" << node->name () << "_var _stub_var_type;" + << be_nl << be_nl; + + // Copy constructor and destructor. + *os << class_name.c_str () << " (const " + << class_name.c_str () << "& rhs);" << be_nl + << "virtual ~" << class_name.c_str () << " (void);" << be_nl << be_nl; + + // _is_a + *os << "virtual CORBA::Boolean _is_a (" << be_idt << be_idt_nl + << "const char* logical_type_id" << be_nl + << "ACE_ENV_ARG_DECL_WITH_DEFAULTS" << be_uidt_nl + << ");" << be_uidt_nl << be_nl; + + // _downcast + *os << "virtual void* _downcast (" << be_idt << be_idt_nl + << "const char* logical_type_id" << be_uidt_nl + << ");" << be_uidt_nl << be_nl; + + // Add a skeleton for our _is_a method. + *os << "static void _is_a_skel (" << be_idt << be_idt_nl + << "TAO_ServerRequest &req," << be_nl + << "void *servant," << be_nl + << "void *servant_upcall" << be_nl + << "ACE_ENV_ARG_DECL" << be_uidt_nl + << ");" << be_uidt_nl << be_nl; + + // Add a skeleton for our _non_existent method. + *os << "static void _non_existent_skel (" << be_idt << be_idt_nl + << "TAO_ServerRequest &req," << be_nl + << "void *servant," << be_nl + << "void *servant_upcall" << be_nl + << "ACE_ENV_ARG_DECL" << be_uidt_nl + << ");" << be_uidt_nl << be_nl; + + // Add a skeleton for our _interface method. + *os << "static void _interface_skel (" << be_idt << be_idt_nl + << "TAO_ServerRequest &req," << be_nl + << "void *servant," << be_nl + << "void *servant_upcall" << be_nl + << "ACE_ENV_ARG_DECL" << be_uidt_nl + << ");" << be_uidt_nl << be_nl; + + // Add a skeleton for our _component method. + *os << "static void _component_skel (" << be_idt << be_idt_nl + << "TAO_ServerRequest &req," << be_nl + << "void *obj," << be_nl + << "void *servant_upcall" << be_nl + << "ACE_ENV_ARG_DECL" << be_uidt_nl + << ");" << be_uidt_nl << be_nl; + + // Add the dispatch method. + *os << "virtual void _dispatch (" << be_idt << be_idt_nl + << "TAO_ServerRequest &req," << be_nl + << "void *_servant_upcall" << be_nl + << "ACE_ENV_ARG_DECL" << be_uidt_nl + << ");" << be_uidt_nl << be_nl; + + this->this_method (node); + + // The _interface_repository_id method. + *os << be_nl + << "virtual const char* _interface_repository_id " + << "(void) const;"; + + // Generate code for elements in the scope (e.g., operations). + if (this->visit_scope (node) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "be_visitor_interface_sh::" + "visit_interface - " + "codegen for scope failed\n"), + -1); + } + + // Generate skeletons for operations of our base classes. These + // skeletons just cast the pointer to the appropriate type + // before invoking the call. + int status = + node->traverse_inheritance_graph ( + be_interface::gen_skel_helper, + os + ); + + if (status == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "be_visitor_interface_sh::" + "visit_interface - " + "inheritance graph traversal failed\n"), + -1); + } + + *os << be_uidt_nl << "};"; + } // if ! node->is_abstract () be_visitor_context ctx (*this->ctx_); @@ -327,7 +331,7 @@ be_visitor_interface_sh::gen_abstract_ops_helper ( TAO_OutStream *os ) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -347,7 +351,7 @@ be_visitor_interface_sh::gen_abstract_ops_helper ( { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_interface_sh::" - "gen_abstract_ops_helper - " + "abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp index 4945b3676f5..aca20597312 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp @@ -443,7 +443,7 @@ be_visitor_interface_ss::gen_abstract_ops_helper (be_interface *node, be_interface *base, TAO_OutStream *os) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -463,7 +463,7 @@ be_visitor_interface_ss::gen_abstract_ops_helper (be_interface *node, { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_interface_ss::" - "gen_abstract_ops_helper - " + "abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp b/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp index 2224b0189af..18ac8f0907a 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp @@ -133,7 +133,7 @@ be_visitor_interface_thru_poa_proxy_impl_sh::gen_abstract_ops_helper ( TAO_OutStream *os ) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -153,7 +153,7 @@ be_visitor_interface_thru_poa_proxy_impl_sh::gen_abstract_ops_helper ( { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_interface_thru_poa_proxy_" - "impl_sh::gen_abstract_ops_helper - " + "impl_sh::abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_ss.cpp b/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_ss.cpp index a37f93b2d50..255e4b12a32 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_ss.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_ss.cpp @@ -70,7 +70,7 @@ be_visitor_interface_thru_poa_proxy_impl_ss::gen_abstract_ops_helper ( TAO_OutStream *os ) { - if (!base->is_abstract ()) + if (node == base) { return 0; } @@ -90,7 +90,7 @@ be_visitor_interface_thru_poa_proxy_impl_ss::gen_abstract_ops_helper ( { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_interface_thru_poa_proxy" - "_impl_ss::gen_abstract_ops_helper - " + "_impl_ss::abstract_base_ops_helper - " "bad node in this scope\n"), -1); } diff --git a/TAO/TAO_IDL/be/be_visitor_module/module.cpp b/TAO/TAO_IDL/be/be_visitor_module/module.cpp index 7505969be27..d7427e01555 100644 --- a/TAO/TAO_IDL/be/be_visitor_module/module.cpp +++ b/TAO/TAO_IDL/be/be_visitor_module/module.cpp @@ -715,8 +715,6 @@ be_visitor_module::visit_component (be_component *node) case TAO_CodeGen::TAO_ROOT_CH: { be_visitor_component_ch visitor (&ctx); - // So we can pick up the abstract ops helpers. - ctx.state (TAO_CodeGen::TAO_INTERFACE_CH); status = node->accept (&visitor); break; } diff --git a/TAO/TAO_IDL/be/be_visitor_root/root.cpp b/TAO/TAO_IDL/be/be_visitor_root/root.cpp index ea8ac913eea..9ed75f883b7 100644 --- a/TAO/TAO_IDL/be/be_visitor_root/root.cpp +++ b/TAO/TAO_IDL/be/be_visitor_root/root.cpp @@ -400,6 +400,10 @@ int be_visitor_root::visit_root (be_root *node) case TAO_CodeGen::TAO_ROOT_CH: (void) tao_cg->end_client_header (); break; + case TAO_CodeGen::TAO_ROOT_CI: + case TAO_CodeGen::TAO_ROOT_CS: + *os << "\n\n"; + break; case TAO_CodeGen::TAO_ROOT_SH: (void) tao_cg->end_server_header (); break; @@ -436,9 +440,6 @@ int be_visitor_root::visit_root (be_root *node) break; } - // Make sure each file ends with a newline. - *os << "\n"; - return 0; } @@ -1104,8 +1105,6 @@ be_visitor_root::visit_component (be_component *node) case TAO_CodeGen::TAO_ROOT_CH: { be_visitor_component_ch visitor (&ctx); - // This is the only context state involved in strategies. - ctx.state (TAO_CodeGen::TAO_INTERFACE_CH); status = node->accept (&visitor); break; } @@ -1669,8 +1668,6 @@ be_visitor_root::gen_explicit_tmplinst (be_root *node, if (be_global->gen_anyop_files ()) { tao_cg->anyop_source ()->gen_endif_AHETI (); - - *tao_cg->anyop_source () << "\n"; } } else if (this->ctx_->state () == TAO_CodeGen::TAO_ROOT_SS) diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp index 3a27523ade3..3a35cfdb386 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp @@ -838,7 +838,7 @@ be_visitor_sequence_cdr_op_cs::visit_node (be_type *bt) } else { - *os << "TAO::Objref_Traits<" << bt->name () << ">::marshal (" + *os << "TAO::Objref_Traits<" << bt->name () << ">::tao_marshal (" << be_idt << be_idt_nl << "_tao_sequence[i].in (), strm" << be_uidt_nl << ");" << be_uidt << be_uidt; diff --git a/TAO/TAO_IDL/be/be_visitor_traits.cpp b/TAO/TAO_IDL/be/be_visitor_traits.cpp index 159e95ef9bd..30db4880b9c 100644 --- a/TAO/TAO_IDL/be/be_visitor_traits.cpp +++ b/TAO/TAO_IDL/be/be_visitor_traits.cpp @@ -116,15 +116,15 @@ be_visitor_traits::visit_interface (be_interface *node) << "struct " << be_global->stub_export_macro () << " Objref_Traits<" << " ::" << node->name () << ">" << be_nl << "{" << be_idt_nl - << "static ::" << node->name () << "_ptr duplicate (" + << "static ::" << node->name () << "_ptr tao_duplicate (" << be_idt << be_idt_nl << "::" << node->name () << "_ptr" << be_uidt_nl << ");" << be_uidt_nl - << "static void release (" << be_idt << be_idt_nl + << "static void tao_release (" << be_idt << be_idt_nl << "::" << node->name () << "_ptr" << be_uidt_nl << ");" << be_uidt_nl - << "static ::" << node->name () << "_ptr nil (void);" << be_nl - << "static CORBA::Boolean marshal (" << be_idt << be_idt_nl + << "static ::" << node->name () << "_ptr tao_nil (void);" << be_nl + << "static CORBA::Boolean tao_marshal (" << be_idt << be_idt_nl << "::" << node->name () << "_ptr p," << be_nl << "TAO_OutputCDR & cdr" << be_uidt_nl << ");" << be_uidt << be_uidt_nl @@ -191,10 +191,10 @@ be_visitor_traits::visit_valuetype (be_valuetype *node) << "struct " << be_global->stub_export_macro () << " Value_Traits<" << node->name () << ">" << be_nl << "{" << be_idt_nl - << "static void add_ref (" << node->name () << " *);" << be_nl - << "static void remove_ref (" << node->name () << " *);" + << "static void tao_add_ref (" << node->name () << " *);" << be_nl + << "static void tao_remove_ref (" << node->name () << " *);" << be_nl - << "static void release (" << node->name () << " *);" + << "static void tao_release (" << node->name () << " *);" << be_uidt_nl << "};"; @@ -388,6 +388,39 @@ be_visitor_traits::visit_array (be_array *node) TAO_OutStream *os = this->ctx_->stream (); + // Generate the array traits specialization definitions, + // guarded by #ifdef on unaliased array element type and length. + + ACE_CString unique; + be_type *bt = be_type::narrow_from_decl (node->base_type ()); + AST_Decl::NodeType nt = bt->node_type (); + + if (nt == AST_Decl::NT_typedef) + { + be_typedef *td = be_typedef::narrow_from_decl (bt); + unique = td->primitive_base_type ()->flat_name (); + } + else + { + unique = bt->flat_name (); + } + + char buf[NAMEBUFSIZE]; + + for (unsigned long i = 0; i < node->n_dims (); ++i) + { + ACE_OS::memset (buf, + '\0', + NAMEBUFSIZE); + ACE_OS::sprintf (buf, + "_%ld", + node->dims ()[i]->ev ()->u.ulval); + unique += buf; + } + + unique += "_traits"; +// os->gen_ifdef_macro (unique.fast_rep ()); + *os << be_nl << be_nl << "ACE_TEMPLATE_SPECIALIZATION" << be_nl << "struct " << be_global->stub_export_macro () << " Array_Traits<" @@ -397,20 +430,20 @@ be_visitor_traits::visit_array (be_array *node) << name << "_tag" << be_uidt_nl << ">" << be_uidt_nl << "{" << be_idt_nl - << "static void free (" << be_idt << be_idt_nl + << "static void tao_free (" << be_idt << be_idt_nl << name << "_slice * _tao_slice" << be_uidt_nl << ");" << be_uidt_nl - << "static " << name << "_slice * dup (" + << "static " << name << "_slice * tao_dup (" << be_idt << be_idt_nl << "const " << name << "_slice * _tao_slice" << be_uidt_nl << ");" << be_uidt_nl - << "static void copy (" << be_idt << be_idt_nl + << "static void tao_copy (" << be_idt << be_idt_nl << name << "_slice * _tao_to," << be_nl << "const " << name << "_slice * _tao_from" << be_uidt_nl << ");" << be_uidt_nl - << "static " << name << "_slice * alloc (void);" + << "static " << name << "_slice * tao_alloc (void);" << be_uidt_nl << "};"; diff --git a/TAO/TAO_IDL/be/be_visitor_union_branch/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_union_branch/cdr_op_cs.cpp index f9574060652..664e9a660f5 100644 --- a/TAO/TAO_IDL/be/be_visitor_union_branch/cdr_op_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union_branch/cdr_op_cs.cpp @@ -145,7 +145,7 @@ be_visitor_union_branch_cdr_op_cs::visit_array (be_array *node) { case TAO_CodeGen::TAO_CDR_INPUT: *os << fname << " _tao_union_tmp;" << be_nl - << fname << "_forany _tao_union_helper (" + << fname << "_forany _tao_union_helper (" << be_idt << be_idt_nl << "_tao_union_tmp" << be_uidt_nl << ");" << be_uidt_nl @@ -301,7 +301,7 @@ be_visitor_union_branch_cdr_op_cs::visit_interface (be_interface *node) { if (f->is_abstract ()) { - *os << "(strm << _tao_union." + *os << "(strm << _tao_union." << f->local_name () << " ());"; } else @@ -315,7 +315,7 @@ be_visitor_union_branch_cdr_op_cs::visit_interface (be_interface *node) else { *os << "result =" << be_idt_nl - << "TAO::Objref_Traits<" << node->name () << ">::marshal (" + << "TAO::Objref_Traits<" << node->name () << ">::tao_marshal (" << be_idt << be_idt_nl << "_tao_union." << f->local_name () << " ()," << be_nl << "strm" << be_uidt_nl @@ -698,7 +698,7 @@ be_visitor_union_branch_cdr_op_cs::visit_sequence (be_sequence *node) -1); } } - + // Now generate the CDR stream operators for the sequence as a // union branch. @@ -849,7 +849,7 @@ be_visitor_union_branch_cdr_op_cs::visit_structure (be_structure *node) -1); } } - + // How generate the CDR stream operators for the structure as // a union branch. @@ -945,7 +945,7 @@ be_visitor_union_branch_cdr_op_cs::visit_union (be_union *node) -1); } } - + // Now generate the CDR stream operators for the union as // a union branch. @@ -1040,3 +1040,4 @@ be_visitor_union_branch_cdr_op_cs::explicit_default (void) return 0; } + diff --git a/TAO/TAO_IDL/be/be_visitor_union_branch/public_assign_cs.cpp b/TAO/TAO_IDL/be/be_visitor_union_branch/public_assign_cs.cpp index 1b5a9f15141..0a94b45ac15 100644 --- a/TAO/TAO_IDL/be/be_visitor_union_branch/public_assign_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union_branch/public_assign_cs.cpp @@ -47,7 +47,7 @@ be_visitor_union_branch_public_assign_cs::visit_union_branch ( ) { TAO_OutStream *os = this->ctx_->stream (); - + *os << be_nl; // This visitor is used when we are generating the copy ctor and @@ -257,15 +257,15 @@ be_visitor_union_branch_public_assign_cs::visit_interface (be_interface *node) if (bt_is_defined) { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << bt->name () << "::_"; + << bt->name () << "::"; } else { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << "TAO::Objref_Traits<" << node->name () << ">::"; + << "TAO::Objref_Traits<" << node->name () << ">::tao"; } - *os << "duplicate (" << be_idt << be_idt_nl + *os << "_duplicate (" << be_idt << be_idt_nl << "u.u_." << ub->local_name () << "_->ptr ()" << be_uidt_nl << ")" << be_uidt << be_uidt_nl << ")" << be_uidt << be_uidt_nl << ");" << be_uidt << be_uidt_nl; @@ -279,17 +279,17 @@ be_visitor_union_branch_public_assign_cs::visit_interface (be_interface *node) if (bt_is_defined) { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << bt->name () << "::_"; + << bt->name () << "::"; } else { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << "TAO::Objref_Traits<" << node->name () << ">::"; + << "TAO::Objref_Traits<" << node->name () << ">::tao"; } - *os << "duplicate (" << be_idt << be_idt_nl + *os << "_duplicate (" << be_idt << be_idt_nl << "u.u_." << ub->local_name () - << "_->ptr ()" << be_uidt_nl + << "_->ptr ()" << be_uidt_nl << ")" << be_uidt << be_uidt_nl << ")," << be_uidt_nl << "*this" << be_uidt_nl << ");" << be_uidt << be_uidt_nl; @@ -354,15 +354,15 @@ be_visitor_union_branch_public_assign_cs::visit_interface_fwd ( if (bt_is_defined) { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << bt->name () << "::_"; + << bt->name () << "::"; } else { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << "TAO::Objref_Traits<" << node->name () << ">::"; + << "TAO::Objref_Traits<" << node->name () << ">::tao"; } - *os << "duplicate (" << be_idt << be_idt_nl + *os << "_duplicate (" << be_idt << be_idt_nl << "u.u_." << ub->local_name () << "_->ptr ()" << be_uidt_nl << ")" << be_uidt << be_uidt_nl << ")" << be_uidt << be_uidt_nl << ");" << be_uidt << be_uidt_nl; @@ -376,17 +376,17 @@ be_visitor_union_branch_public_assign_cs::visit_interface_fwd ( if (bt_is_defined) { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << bt->name () << "::_"; + << bt->name () << "::"; } else { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << "TAO::Objref_Traits<" << node->name () << ">::"; + << "TAO::Objref_Traits<" << node->name () << ">::tao"; } - *os << "duplicate (" << be_idt << be_idt_nl + *os << "_duplicate (" << be_idt << be_idt_nl << "u.u_." << ub->local_name () - << "_->ptr ()" << be_uidt_nl + << "_->ptr ()" << be_uidt_nl << ")" << be_uidt << be_uidt_nl << ")," << be_uidt_nl << "*this" << be_uidt_nl << ");" << be_uidt << be_uidt_nl; diff --git a/TAO/TAO_IDL/be/be_visitor_union_branch/public_ci.cpp b/TAO/TAO_IDL/be/be_visitor_union_branch/public_ci.cpp index 24909678547..5b45fd9505d 100644 --- a/TAO/TAO_IDL/be/be_visitor_union_branch/public_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union_branch/public_ci.cpp @@ -363,15 +363,15 @@ be_visitor_union_branch_public_ci::visit_interface (be_interface *node) if (bt_is_defined) { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << bt->name () << "::_"; + << bt->name () << "::"; } else { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << "TAO::Objref_Traits<" << node->name () << ">::"; + << "TAO::Objref_Traits<" << node->name () << ">::tao"; } - *os << "duplicate (val)" << be_uidt_nl << ")" << be_uidt << be_uidt_nl + *os << "_duplicate (val)" << be_uidt_nl << ")" << be_uidt << be_uidt_nl << ");" << be_uidt << be_uidt_nl << "}" << be_nl << be_nl; @@ -460,15 +460,15 @@ be_visitor_union_branch_public_ci::visit_interface_fwd (be_interface_fwd *node) if (bt_is_defined) { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << bt->name () << "::_"; + << bt->name () << "::"; } else { *os << "OBJECT_FIELD (" << be_idt << be_idt_nl - << "TAO::Objref_Traits<" << node->name () << ">::"; + << "TAO::Objref_Traits<" << node->name () << ">::tao"; } - *os << "duplicate (val)" << be_uidt_nl << ")" << be_uidt << be_uidt_nl + *os << "_duplicate (val)" << be_uidt_nl << ")" << be_uidt << be_uidt_nl << ");" << be_uidt << be_uidt_nl << "}" << be_nl << be_nl; @@ -690,7 +690,7 @@ be_visitor_union_branch_public_ci::visit_predefined_type ( << "ACE_INLINE" << be_nl << "void" << be_nl << bu->name () << "::" << ub->local_name () << " ("; - + AST_PredefinedType::PredefinedType pt = node->pt (); @@ -712,7 +712,7 @@ be_visitor_union_branch_public_ci::visit_predefined_type ( << bt->name () << " &"; } - else + else { *os << bt->name (); } @@ -762,7 +762,7 @@ be_visitor_union_branch_public_ci::visit_predefined_type ( break; case AST_PredefinedType::PT_value: *os << "CORBA::add_ref (val);" << be_nl - << "this->u_." << ub->local_name () + << "this->u_." << ub->local_name () << "_ = val;" << be_uidt_nl; break; @@ -900,7 +900,7 @@ be_visitor_union_branch_public_ci::visit_sequence (be_sequence *node) // (1) Set from a const. *os << "// Accessor to set the member." << be_nl - << "ACE_INLINE" << be_nl + << "ACE_INLINE" << be_nl << "void" << be_nl << bu->name () << "::" << ub->local_name () << " (const " << bt->name () << " &val)" << be_nl diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/field_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/field_ch.cpp index 461a6b53a4c..dd078a1390a 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype/field_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/field_ch.cpp @@ -432,11 +432,11 @@ be_visitor_valuetype_field_ch::visit_predefined_type (be_predefined_type *node) // Get method (read-only). *os << pre_op () << "const " << bt->name () << " &" << ub->local_name () << " (void) const" - << post_op () << be_nl; + << post_op (); // Get method (read/write). *os << pre_op () << bt->name () << " &" << ub->local_name () << " (void)" - << post_op (); + << post_op () << be_nl << be_nl; break; case AST_PredefinedType::PT_void: break; diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp index 6292d08fa71..6f04adbbb06 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp @@ -160,13 +160,25 @@ be_visitor_valuetype_ch::visit_valuetype (be_valuetype *node) *os << "public virtual CORBA::ValueBase"; } - - // Generate the supported interfaces. - for (i = 0; i < node->n_supports (); ++i) + + if (node->supports_abstract ()) { - *os << "," << be_nl - << "public virtual " - << node->supports ()[i]->name (); + status = + node->traverse_supports_list_graphs ( + be_valuetype::abstract_supports_helper, + os, + I_TRUE, + I_FALSE + ); + + if (status == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_valuetype_ch::" + "visit_valuetype - " + "traversal of supported interfaces failed\n"), + -1); + } } // Generate the body. @@ -237,10 +249,9 @@ be_visitor_valuetype_ch::visit_valuetype (be_valuetype *node) *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl << "// " << __FILE__ << ":" << __LINE__; - // If we inherit from CORBA::Object and/or CORBA::AbstractBase - // (in addition to CORBA::ValueBase) we have to add these - // to avoid ambiguity. - if (node->n_supports () > 0) + // If we inherit from both CORBA::ValueBase and CORBA::AbstractBase, + // we have to add this to avoid ambiguity. + if (node->supports_abstract ()) { *os << be_uidt_nl << be_nl << "public:" << be_idt_nl; *os << be_nl << "virtual void _add_ref (void) = 0;" << be_nl; diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp index 2ee88358c20..3b86f08e4b1 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ci.cpp @@ -56,8 +56,35 @@ be_visitor_valuetype_ci::visit_valuetype (be_valuetype *node) << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; *os << "ACE_INLINE" << be_nl; - *os << node->name () << "::" << node->local_name () << " (void)" << be_nl - << "{}" << be_nl << be_nl; + *os << node->name () << "::" << node->local_name () << " (void)" << be_nl; + + if (node->supports_abstract ()) + { + *os << "{" << be_idt; + + int status = + node->traverse_supports_list_graphs ( + be_valuetype::gen_abstract_init_helper, + os, + I_TRUE, + I_FALSE + ); + + if (status == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_valuetype_ci::" + "visit_valuetype - " + "traversal of supported interfaces failed\n"), + -1); + } + + *os << be_uidt_nl << "}" << be_nl << be_nl; + } + else + { + *os << "{}" << be_nl << be_nl; + } *os << "ACE_INLINE" << be_nl; *os << node->name () << "::~" << node->local_name () << " (void)" << be_nl; diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp index 869e85a1e6b..daa6e078b36 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_cs.cpp @@ -70,7 +70,7 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION " << be_nl << "void" << be_nl - << "TAO::Value_Traits<" << node->name () << ">::add_ref (" + << "TAO::Value_Traits<" << node->name () << ">::tao_add_ref (" << be_idt << be_idt_nl << node->name () << " * p" << be_uidt_nl << ")" << be_uidt_nl @@ -81,7 +81,7 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION " << be_nl << "void" << be_nl - << "TAO::Value_Traits<" << node->name () << ">::remove_ref (" + << "TAO::Value_Traits<" << node->name () << ">::tao_remove_ref (" << be_idt << be_idt_nl << node->name () << " * p" << be_uidt_nl << ")" << be_uidt_nl @@ -92,7 +92,7 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node) *os << be_nl << be_nl << "ACE_TEMPLATE_CLASS_MEMBER_SPECIALIZATION " << be_nl << "void" << be_nl - << "TAO::Value_Traits<" << node->name () << ">::release (" + << "TAO::Value_Traits<" << node->name () << ">::tao_release (" << be_idt << be_idt_nl << node->name () << " * p" << be_uidt_nl << ")" << be_uidt_nl @@ -232,10 +232,7 @@ be_visitor_valuetype_cs::visit_valuetype (be_valuetype *node) << "return retval;" << be_uidt_nl << "}"; - // If we inherit from CORBA::Object and/or CORBA::AbstractBase - // (in addition to CORBA::ValueBase) we have to add these - // to avoid ambiguity. - if (node->n_supports () > 0) + if (node->supports_abstract ()) { *os << be_nl << be_nl << "CORBA::ValueBase *" << be_nl diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp index 0d89ded2a01..0d5d5836734 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_ch.cpp @@ -180,10 +180,9 @@ be_visitor_valuetype_obv_ch::visit_valuetype (be_valuetype *node) -1); } - // If we inherit from CORBA::Object and/or CORBA::AbstractBase - // (in addition to CORBA::ValueBase) we have to add these - // to avoid ambiguity. - if (node->n_supports () > 0) + // If we inherit from both CORBA::ValueBase and CORBA::AbstractBase, + // we have to add this to avoid ambiguity. + if (node->supports_abstract ()) { *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl << "// " << __FILE__ << ":" << __LINE__ ; diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp index fc0202f10a6..e415120ef58 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_obv_cs.cpp @@ -107,10 +107,9 @@ be_visitor_valuetype_obv_cs::visit_valuetype (be_valuetype *node) -1); } - // If we inherit from CORBA::Object and/or CORBA::AbstractBase - // (in addition to CORBA::ValueBase) we have to add these - // to avoid ambiguity. - if (node->n_supports () > 0) + // If we inherit from both CORBA::ValueBase and CORBA::AbstractBase, + // we have to add this to avoid ambiguity. + if (node->supports_abstract ()) { *os << be_nl << be_nl << "void" << be_nl << node->full_obv_skel_name () diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ss.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ss.cpp index e3f63a051a7..f7db8a0ca0f 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ss.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ss.cpp @@ -98,7 +98,7 @@ be_visitor_valuetype_ss::visit_valuetype (be_valuetype *node) *os << be_idt_nl << ": TAO_Abstract_ServantBase (rhs)," << be_nl - << " TAO_ServantBase (rhs)," << be_idt_nl; + << " TAO_ServantBase (rhs)," << be_nl; if (concrete->is_nested ()) { @@ -113,8 +113,22 @@ be_visitor_valuetype_ss::visit_valuetype (be_valuetype *node) *os << bd->full_skel_name () << " (rhs)," << be_nl; } - *os << "ValueBase (rhs)" << be_uidt << be_uidt_nl - << "{}" << be_nl << be_nl; + *os << " ValueBase (rhs)," << be_nl; + + if (node->is_nested ()) + { + AST_Decl *scope = ScopeAsDecl (node->defined_in ()); + + *os << " ACE_NESTED_CLASS (" << scope->name () << ", " + << node->local_name () << ") ()"; + } + else + { + be_interface *bd = be_interface::narrow_from_decl (node); + *os << bd->full_skel_name () << " ()"; + } + + *os << be_uidt_nl << "{}" << be_nl << be_nl; *os << full_skel_name << "::~" << local_name_prefix << node_local_name diff --git a/TAO/TAO_IDL/be_include/be_global.h b/TAO/TAO_IDL/be_include/be_global.h index 532b0eea9e8..f104767418e 100644 --- a/TAO/TAO_IDL/be_include/be_global.h +++ b/TAO/TAO_IDL/be_include/be_global.h @@ -428,10 +428,6 @@ public: void gen_anyop_files (idl_bool val); // Accessors for the member. - idl_bool do_ccm_preproc (void) const; - void do_ccm_preproc (idl_bool val); - // Accessors for the member do_ccm_preproc_. - ACE_CString spawn_options (void); // Command line passed to ACE_Process::spawn. Different // implementations in IDL and IFR backends. @@ -586,10 +582,7 @@ private: // Reference holder for component skeleton visitors. idl_bool gen_anyop_files_; - // Separate files for generated Any operators? - - idl_bool do_ccm_preproc_; - // Do the IDL3 to IDL2 preprocessing? + // @@@ (TAO TEAM ONLY) Separate files for generated Any operators? }; #endif /* _BE_GLOBAL_H */ diff --git a/TAO/TAO_IDL/be_include/be_valuetype.h b/TAO/TAO_IDL/be_include/be_valuetype.h index b3c81fa052f..37c9c2df060 100644 --- a/TAO/TAO_IDL/be_include/be_valuetype.h +++ b/TAO/TAO_IDL/be_include/be_valuetype.h @@ -134,6 +134,12 @@ public: // Helper method passed to the template method to generate code for // adding abstract supported interfaces to the inheritance list. + static int gen_abstract_init_helper (be_interface *node, + be_interface *base, + TAO_OutStream *os); + // Helper method to initialize the val_ member of the generated + // C++ class for each abstract interface that we support. + static int gen_skel_helper (be_interface *node, be_interface *base, TAO_OutStream *os); diff --git a/TAO/TAO_IDL/be_include/be_visitor_amh_pre_proc.h b/TAO/TAO_IDL/be_include/be_visitor_amh_pre_proc.h index e362eb94d23..a17e821e674 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_amh_pre_proc.h +++ b/TAO/TAO_IDL/be_include/be_visitor_amh_pre_proc.h @@ -49,6 +49,9 @@ public: virtual int visit_operation (be_operation *node); + // @@@ (JP) I don't think this has to be overridden. + virtual int visit_scope (be_scope *node); + private: /// Create the reponse handler interface be_interface *create_response_handler (be_interface *node, diff --git a/TAO/TAO_IDL/be_include/be_visitor_ccm_pre_proc.h b/TAO/TAO_IDL/be_include/be_visitor_ccm_pre_proc.h index f62257fcf3b..a1e5f0c6af8 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_ccm_pre_proc.h +++ b/TAO/TAO_IDL/be_include/be_visitor_ccm_pre_proc.h @@ -126,13 +126,6 @@ private: const char *name, be_exception *&result); - int create_uses_multiple_stuff (be_component *node, - AST_Component::port_description *pd); - int create_uses_multiple_struct (be_component *node, - AST_Component::port_description *pd); - int create_uses_multiple_sequence (be_component *node, - AST_Component::port_description *pd); - int create_event_consumer (be_eventtype *node); AST_Interface *lookup_consumer (AST_Component::port_description *pd); AST_Interface *create_explicit (be_home *node); @@ -149,8 +142,6 @@ private: private: // These are created for operations implied by 'uses multiple' declarations. Identifier module_id_; - be_structure *connection_; - be_sequence *connections_; be_valuetype *cookie_; // Exceptions thrown by implied CCM operations. diff --git a/TAO/TAO_IDL/driver/drv_preproc.cpp b/TAO/TAO_IDL/driver/drv_preproc.cpp index bf9c2d1bd76..9c231e8997c 100644 --- a/TAO/TAO_IDL/driver/drv_preproc.cpp +++ b/TAO/TAO_IDL/driver/drv_preproc.cpp @@ -423,32 +423,14 @@ DRV_check_for_include (const char* buf) // Terminate this string. file_name [i] = '\0'; - - size_t len = ACE_OS::strlen (file_name); - // Some backends pass this file through, others don't. + // Store in the idl_global, unless it's "orb.idl" - + // we don't want to generate header includes for that. if (ACE_OS::strcmp (file_name, "orb.idl") == 0) { - if (idl_global->pass_orb_idl ()) - { - idl_global->add_to_included_idl_files (file_name); - } - else - { - DRV_get_orb_idl_includes (); - } - } - // We have special lookup for orb.idl (TAO_ROOT/tao) that - // also kicks in for .pidl files. If one of the latter is - // included as a local name only, we add the 'tao/' prefix - // so the generated C++ include files will be correct. - else if (ACE_OS::strcmp (file_name + len - 5, ".pidl") == 0 - && ACE_OS::strchr (file_name, '/') == 0 - && ACE_OS::strchr (file_name, '\\') == 0) - { - ACE_CString fixed_name ("tao/"); - fixed_name += file_name; - idl_global->add_to_included_idl_files (fixed_name.rep ()); + // However, we do want to generate includes for the + // .pidl files that it contains. + DRV_get_orb_idl_includes (); } else { diff --git a/TAO/TAO_IDL/fe/fe_interface_header.cpp b/TAO/TAO_IDL/fe/fe_interface_header.cpp index f6d54db537a..7df853b91aa 100644 --- a/TAO/TAO_IDL/fe/fe_interface_header.cpp +++ b/TAO/TAO_IDL/fe/fe_interface_header.cpp @@ -950,6 +950,14 @@ FE_ComponentHeader::compile_supports (UTL_NameList *supports) continue; } + // Abstract interface? (illegal for components to support). + if (i->is_abstract ()) + { + idl_global->err ()->concrete_interface_expected (this->name (), + i->name ()); + continue; + } + // Local interface? (illegal for components to support). if (i->is_local ()) { diff --git a/TAO/TAO_IDL/fe/fe_lookup.cpp b/TAO/TAO_IDL/fe/fe_lookup.cpp index 93ffbe3019e..e155f034043 100644 --- a/TAO/TAO_IDL/fe/fe_lookup.cpp +++ b/TAO/TAO_IDL/fe/fe_lookup.cpp @@ -181,13 +181,10 @@ TAO_IDL_CPP_Keyword_Table::lookup (const char *str, unsigned int len) if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE) { - if (len == static_cast<unsigned int> (ACE_OS::strlen (wordlist[key].keyword_))) - { - const char *s = wordlist[key].keyword_; + const char *s = wordlist[key].keyword_; - if (*str == *s && !ACE_OS::strncmp (str + 1, s + 1, len - 1)) - return &wordlist[key]; - } + if (*str == *s && !ACE_OS::strncmp (str + 1, s + 1, len - 1)) + return &wordlist[key]; } } return 0; diff --git a/TAO/TAO_IDL/fe/idl.ll b/TAO/TAO_IDL/fe/idl.ll index a7cb460ae90..fd2d95715e3 100644 --- a/TAO/TAO_IDL/fe/idl.ll +++ b/TAO/TAO_IDL/fe/idl.ll @@ -279,7 +279,7 @@ oneway return IDL_ONEWAY; IDL_STRING_LITERAL); return IDL_STRING_LITERAL; } -(L\"([^\\\"]*|\\u([0-9a-fA-F]{1,4}))*\"[ \t]*)+ { +L\"([^\\\"]*|\\u([0-9a-fA-F]{1,4}))*\" { /* Skip the bookends */ char *tmp = ACE_OS::strdup (ace_yytext); tmp[strlen (tmp) - 1] = '\0'; diff --git a/TAO/TAO_IDL/fe/idl.yy b/TAO/TAO_IDL/fe/idl.yy index c4a400ffbfa..92e542619b2 100644 --- a/TAO/TAO_IDL/fe/idl.yy +++ b/TAO/TAO_IDL/fe/idl.yy @@ -4516,6 +4516,14 @@ uses_decl : ud.impl = interface_type; ud.is_multiple = $2; c->uses ().enqueue_tail (ud); + + if (ud.is_multiple == I_TRUE) + { + // These datatypes must be created in the + // front end so they can be looked up + // when compiling the generated executor IDL. + idl_global->create_uses_multiple_stuff (c, ud); + } } } } diff --git a/TAO/TAO_IDL/fe/lex.yy.cpp b/TAO/TAO_IDL/fe/lex.yy.cpp index 38ac79e950e..be461db9bd3 100644 --- a/TAO/TAO_IDL/fe/lex.yy.cpp +++ b/TAO/TAO_IDL/fe/lex.yy.cpp @@ -284,7 +284,7 @@ static void tao_yy_fatal_error TAO_YY_PROTO(( tao_yyconst char msg[] )); #define TAO_YY_NUM_RULES 104 #define TAO_YY_END_OF_BUFFER 105 -static tao_yyconst short int tao_yy_accept[551] = +static tao_yyconst short int tao_yy_accept[549] = { 0, 101, 101, 105, 103, 101, 102, 102, 103, 103, 103, 103, 103, 76, 72, 103, 103, 103, 68, 68, 68, @@ -310,42 +310,42 @@ static tao_yyconst short int tao_yy_accept[551] = 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 0, 0, 0, 0, 0, 0, 0, 82, 80, 0, - 0, 73, 0, 69, 70, 68, 78, 0, 0, 83, - 0, 68, 59, 68, 68, 68, 20, 27, 68, 68, - 68, 68, 68, 68, 68, 13, 68, 68, 68, 68, - 68, 68, 68, 48, 68, 68, 68, 68, 24, 68, + 0, 73, 0, 69, 70, 68, 0, 83, 0, 68, + 59, 68, 68, 68, 20, 27, 68, 68, 68, 68, + 68, 68, 68, 13, 68, 68, 68, 68, 68, 68, + 68, 48, 68, 68, 68, 68, 24, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 57, 68, 31, 68, 68, 0, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, - - 0, 80, 0, 81, 0, 60, 0, 0, 68, 68, - 68, 68, 68, 10, 68, 68, 68, 68, 68, 44, - 68, 68, 68, 68, 18, 22, 68, 68, 61, 68, - 33, 68, 68, 68, 68, 30, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 25, 68, 68, 68, 68, - 68, 68, 68, 68, 17, 68, 68, 28, 68, 91, + 57, 68, 31, 68, 68, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 0, 0, 0, 0, 80, + + 0, 81, 0, 60, 0, 0, 68, 68, 68, 68, + 68, 10, 68, 68, 68, 68, 68, 44, 68, 68, + 68, 68, 18, 22, 68, 68, 61, 68, 33, 68, + 68, 68, 68, 30, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 25, 68, 68, 68, 68, 68, 68, + 68, 68, 17, 68, 68, 28, 68, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 84, 0, 2, 68, 68, 68, 68, 68, - 68, 35, 68, 23, 68, 68, 68, 46, 68, 49, - 68, 68, 3, 68, 32, 64, 68, 68, 68, 38, + 84, 0, 2, 68, 68, 68, 68, 68, 68, 35, + 68, 23, 68, 68, 68, 46, 68, 49, 68, 68, + 3, 68, 32, 64, 68, 68, 68, 38, 68, 4, - 68, 4, 68, 68, 68, 14, 12, 68, 19, 68, - 68, 55, 68, 68, 68, 68, 0, 89, 0, 0, + 68, 68, 68, 14, 12, 68, 19, 68, 68, 55, + 68, 68, 68, 68, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 68, 68, 29, 68, 68, 8, 21, 68, - 68, 36, 68, 68, 58, 68, 68, 37, 68, 68, - 68, 68, 68, 68, 68, 11, 68, 68, 68, 15, - 0, 0, 87, 87, 0, 0, 93, 0, 0, 92, - 0, 0, 0, 0, 0, 0, 0, 34, 68, 68, - 43, 68, 68, 68, 68, 50, 68, 52, 68, 5, - 16, 68, 39, 68, 68, 26, 68, 0, 97, 97, - - 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, - 0, 0, 6, 42, 45, 7, 47, 9, 68, 53, - 54, 68, 68, 41, 0, 85, 85, 0, 0, 88, - 88, 0, 0, 0, 0, 51, 68, 56, 0, 98, - 98, 0, 0, 0, 40, 94, 0, 86, 86, 0 + 68, 68, 29, 68, 68, 8, 21, 68, 68, 36, + 68, 68, 58, 68, 68, 37, 68, 68, 68, 68, + 68, 68, 68, 11, 68, 68, 68, 15, 0, 0, + 87, 87, 0, 0, 93, 0, 0, 92, 0, 0, + 0, 0, 0, 0, 0, 34, 68, 68, 43, 68, + 68, 68, 68, 50, 68, 52, 68, 5, 16, 68, + 39, 68, 68, 26, 68, 0, 97, 97, 0, 0, + + 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, + 6, 42, 45, 7, 47, 9, 68, 53, 54, 68, + 68, 41, 0, 85, 85, 0, 0, 88, 88, 0, + 0, 0, 0, 51, 68, 56, 0, 98, 98, 0, + 0, 0, 40, 94, 0, 86, 86, 0 } ; static tao_yyconst int tao_yy_ec[256] = @@ -390,141 +390,141 @@ static tao_yyconst int tao_yy_meta[60] = 6, 8, 6, 8, 6, 8, 6, 8, 6 } ; -static tao_yyconst short int tao_yy_base[578] = +static tao_yyconst short int tao_yy_base[576] = { 0, - 0, 58, 1044, 1045, 59, 1045, 1045, 56, 1009, 54, - 57, 65, 68, 73, 1025, 1023, 1020, 0, 1017, 69, - 1002, 1008, 45, 987, 56, 37, 48, 67, 996, 985, - 61, 984, 65, 997, 79, 63, 82, 83, 71, 71, - 93, 92, 134, 144, 1010, 130, 97, 148, 0, 1022, - 147, 152, 158, 184, 210, 1045, 148, 161, 197, 203, - 229, 0, 239, 1045, 1045, 1045, 0, 1002, 137, 994, - 983, 994, 972, 965, 969, 973, 968, 985, 109, 966, - 978, 962, 973, 960, 975, 976, 975, 130, 962, 956, - 962, 958, 132, 96, 959, 968, 959, 950, 949, 963, - - 947, 136, 964, 956, 963, 138, 948, 944, 945, 951, - 938, 942, 140, 952, 944, 946, 946, 933, 199, 0, - 174, 1045, 980, 243, 942, 946, 940, 930, 962, 226, - 196, 204, 1045, 972, 971, 252, 970, 256, 0, 261, - 272, 1045, 258, 1045, 286, 0, 277, 283, 0, 947, - 235, 279, 921, 967, 257, 935, 949, 918, 0, 919, - 924, 930, 916, 917, 110, 912, 930, 928, 909, 915, - 913, 921, 905, 920, 918, 921, 903, 915, 904, 897, - 912, 915, 908, 913, 892, 892, 902, 905, 886, 0, - 247, 886, 895, 887, 901, 883, 885, 884, 152, 885, - - 880, 885, 893, 882, 887, 876, 873, 889, 891, 873, - 918, 917, 876, 882, 872, 884, 328, 1045, 1045, 301, - 910, 0, 303, 310, 1045, 893, 300, 910, 0, 1045, - 0, 878, 0, 862, 870, 873, 0, 0, 862, 259, - 871, 860, 853, 861, 853, 0, 851, 854, 854, 863, - 863, 846, 864, 0, 846, 843, 844, 849, 0, 853, - 847, 849, 835, 836, 854, 853, 852, 843, 842, 845, - 834, 843, 846, 826, 831, 841, 828, 839, 838, 296, - 826, 832, 0, 833, 0, 819, 827, 863, 317, 829, - 819, 827, 824, 818, 1045, 290, 348, 820, 824, 818, - - 808, 1045, 851, 1045, 850, 0, 373, 849, 802, 820, - 818, 818, 804, 0, 804, 792, 802, 802, 808, 0, - 792, 791, 792, 791, 0, 0, 799, 787, 0, 800, - 0, 800, 799, 787, 797, 0, 776, 782, 779, 794, - 304, 778, 782, 781, 785, 0, 786, 772, 773, 782, - 788, 783, 783, 768, 0, 771, 764, 0, 769, 1045, - 378, 299, 762, 370, 768, 808, 807, 766, 772, 762, - 774, 400, 1045, 800, 0, 770, 751, 757, 765, 764, - 748, 0, 747, 0, 741, 756, 739, 0, 744, 0, - 761, 685, 0, 680, 0, 0, 655, 671, 668, 0, - - 662, 0, 646, 652, 627, 0, 0, 615, 0, 599, - 609, 0, 609, 596, 565, 582, 427, 1045, 442, 344, - 353, 450, 465, 586, 613, 356, 579, 569, 577, 573, - 473, 605, 558, 557, 0, 562, 556, 0, 0, 550, - 546, 0, 554, 554, 0, 529, 519, 0, 505, 515, - 493, 508, 489, 474, 484, 0, 459, 456, 442, 0, - 469, 397, 1045, 399, 430, 472, 1045, 485, 365, 1045, - 500, 371, 428, 515, 414, 385, 452, 0, 415, 395, - 0, 382, 358, 352, 365, 0, 351, 0, 313, 0, - 0, 301, 0, 309, 297, 0, 289, 497, 1045, 503, - - 305, 519, 522, 530, 1045, 534, 538, 448, 551, 555, - 412, 239, 0, 0, 0, 0, 0, 0, 193, 0, - 0, 187, 171, 0, 559, 1045, 569, 571, 573, 1045, - 575, 578, 216, 197, 457, 0, 55, 0, 580, 1045, - 585, 61, 594, 599, 0, 1045, 601, 1045, 604, 1045, - 625, 633, 637, 643, 651, 659, 663, 670, 678, 683, - 686, 693, 698, 701, 704, 708, 715, 720, 727, 732, - 739, 747, 755, 763, 771, 779, 787 + 0, 58, 1037, 1038, 59, 1038, 1038, 56, 1002, 54, + 57, 65, 68, 73, 1018, 1016, 1013, 0, 1010, 69, + 995, 1001, 45, 980, 56, 37, 48, 67, 989, 978, + 61, 977, 65, 990, 79, 63, 82, 83, 71, 71, + 93, 92, 134, 144, 1003, 130, 97, 148, 0, 1015, + 147, 152, 158, 184, 210, 1038, 148, 161, 197, 203, + 229, 0, 239, 1038, 1038, 1038, 0, 995, 137, 987, + 976, 987, 965, 958, 962, 966, 961, 978, 109, 959, + 971, 955, 966, 953, 968, 969, 968, 130, 955, 949, + 955, 951, 132, 96, 952, 961, 952, 943, 942, 956, + + 940, 136, 957, 949, 956, 138, 941, 937, 938, 944, + 931, 935, 140, 945, 937, 939, 939, 926, 199, 0, + 174, 1038, 973, 243, 935, 939, 933, 923, 955, 226, + 196, 204, 1038, 965, 964, 252, 963, 256, 0, 261, + 272, 1038, 258, 1038, 286, 0, 277, 283, 0, 940, + 235, 1038, 914, 960, 257, 928, 942, 911, 0, 912, + 917, 923, 909, 910, 110, 905, 923, 921, 902, 908, + 906, 914, 898, 913, 911, 914, 896, 908, 897, 890, + 905, 908, 901, 906, 885, 885, 895, 898, 879, 0, + 247, 879, 888, 880, 894, 876, 878, 877, 152, 878, + + 873, 878, 886, 875, 880, 869, 866, 882, 884, 866, + 911, 910, 869, 875, 865, 877, 328, 1038, 1038, 301, + 903, 0, 290, 310, 1038, 886, 0, 1038, 0, 872, + 0, 856, 864, 867, 0, 0, 856, 247, 865, 854, + 847, 855, 847, 0, 845, 848, 848, 857, 857, 840, + 858, 0, 840, 837, 838, 843, 0, 847, 841, 843, + 829, 830, 848, 847, 846, 837, 836, 839, 828, 837, + 840, 820, 825, 835, 822, 833, 832, 284, 820, 826, + 0, 827, 0, 813, 821, 857, 315, 823, 813, 821, + 818, 812, 1038, 268, 343, 814, 818, 812, 802, 1038, + + 845, 1038, 844, 0, 373, 843, 796, 814, 812, 812, + 798, 0, 798, 786, 796, 796, 802, 0, 786, 785, + 786, 785, 0, 0, 793, 781, 0, 794, 0, 794, + 793, 781, 791, 0, 770, 776, 773, 788, 301, 772, + 776, 775, 779, 0, 780, 766, 767, 776, 782, 777, + 777, 762, 0, 765, 758, 0, 763, 1038, 378, 279, + 756, 361, 762, 802, 801, 760, 766, 756, 768, 400, + 1038, 794, 0, 764, 745, 751, 759, 701, 674, 0, + 662, 0, 653, 666, 647, 0, 641, 0, 656, 629, + 0, 625, 0, 0, 596, 612, 611, 0, 595, 0, + + 580, 587, 569, 0, 0, 566, 0, 565, 578, 0, + 578, 577, 556, 573, 427, 1038, 442, 348, 360, 450, + 465, 578, 605, 381, 562, 551, 558, 551, 473, 579, + 523, 510, 0, 510, 502, 0, 0, 504, 501, 0, + 510, 506, 0, 493, 474, 0, 446, 455, 433, 452, + 443, 408, 425, 0, 414, 411, 378, 0, 469, 369, + 1038, 397, 400, 472, 1038, 421, 365, 1038, 500, 415, + 372, 515, 372, 305, 398, 0, 366, 337, 0, 322, + 312, 302, 314, 0, 306, 0, 288, 0, 0, 287, + 0, 292, 278, 0, 278, 430, 1038, 497, 307, 503, + + 519, 523, 1038, 531, 538, 448, 546, 551, 558, 261, + 0, 0, 0, 0, 0, 0, 193, 0, 0, 187, + 171, 0, 565, 1038, 567, 575, 572, 1038, 577, 579, + 216, 197, 457, 0, 55, 0, 581, 1038, 591, 61, + 600, 602, 0, 1038, 604, 1038, 606, 1038, 627, 635, + 639, 645, 653, 661, 665, 672, 680, 685, 688, 695, + 700, 703, 706, 710, 717, 722, 729, 734, 741, 749, + 757, 765, 773, 781, 789 } ; -static tao_yyconst short int tao_yy_def[578] = +static tao_yyconst short int tao_yy_def[576] = { 0, - 550, 1, 550, 550, 550, 550, 550, 551, 552, 550, - 550, 550, 550, 550, 550, 550, 550, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 550, 550, 550, 550, 551, 550, 554, 550, - 555, 550, 550, 550, 550, 550, 556, 55, 550, 550, - 550, 557, 550, 550, 550, 550, 553, 553, 558, 559, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 550, 44, - 44, 550, 121, 550, 550, 550, 550, 550, 550, 550, - 551, 551, 550, 550, 550, 550, 560, 550, 561, 550, - 550, 550, 556, 550, 556, 58, 550, 550, 557, 553, - 558, 550, 550, 550, 550, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 562, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 563, 561, 550, 550, 550, 553, 550, 550, 564, 550, - 565, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 562, 550, 550, - 550, 550, 550, 217, 550, 217, 550, 550, 550, 550, - - 550, 550, 550, 550, 550, 553, 558, 566, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 550, - 550, 550, 550, 550, 550, 567, 550, 550, 550, 550, - 550, 307, 550, 568, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 550, 550, 550, 569, - 550, 550, 550, 550, 567, 550, 550, 550, 550, 550, - 307, 570, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 550, 569, 550, 569, 571, 550, 550, 572, 550, 550, - 550, 550, 550, 550, 550, 558, 550, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 571, 550, 571, - - 572, 550, 573, 550, 550, 550, 574, 550, 550, 550, - 550, 550, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 573, 550, 573, 550, 574, 550, - 574, 575, 576, 550, 550, 553, 553, 553, 575, 550, - 575, 576, 550, 577, 553, 550, 577, 550, 577, 0, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550 + 548, 1, 548, 548, 548, 548, 548, 549, 550, 548, + 548, 548, 548, 548, 548, 548, 548, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 548, 548, 548, 548, 549, 548, 552, 548, + 553, 548, 548, 548, 548, 548, 554, 55, 548, 548, + 548, 555, 548, 548, 548, 548, 551, 551, 556, 557, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 548, 44, + 44, 548, 121, 548, 548, 548, 548, 548, 548, 548, + 549, 549, 548, 548, 548, 548, 558, 548, 559, 548, + 548, 548, 554, 548, 554, 58, 548, 548, 555, 551, + 556, 548, 548, 548, 548, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 560, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 561, 559, 548, 548, 548, 551, 562, 548, 563, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 560, 548, 548, 548, 548, + 548, 217, 548, 217, 548, 548, 548, 548, 548, 548, + + 548, 548, 548, 551, 556, 564, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 548, 548, 548, + 548, 548, 548, 565, 548, 548, 548, 548, 548, 305, + 548, 566, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 548, 548, 548, 567, 548, 548, + 548, 548, 565, 548, 548, 548, 548, 548, 305, 568, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 548, 567, + 548, 567, 569, 548, 548, 570, 548, 548, 548, 548, + 548, 548, 548, 556, 548, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 551, 551, 551, 569, 548, 569, 570, 548, + + 571, 548, 548, 548, 572, 548, 548, 548, 548, 548, + 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, + 551, 551, 571, 548, 571, 548, 572, 548, 572, 573, + 574, 548, 548, 551, 551, 551, 573, 548, 573, 574, + 548, 575, 551, 548, 575, 548, 575, 0, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548 } ; -static tao_yyconst short int tao_yy_nxt[1105] = +static tao_yyconst short int tao_yy_nxt[1098] = { 0, 4, 5, 6, 7, 5, 8, 4, 9, 4, 4, 10, 11, 12, 13, 14, 14, 15, 16, 4, 17, @@ -532,10 +532,10 @@ static tao_yyconst short int tao_yy_nxt[1105] = 22, 18, 18, 4, 23, 24, 25, 26, 27, 28, 29, 30, 31, 18, 18, 32, 33, 34, 35, 36, 18, 37, 38, 39, 40, 41, 42, 18, 18, 43, - 46, 48, 43, 46, 44, 52, 543, 53, 54, 54, + 46, 48, 43, 46, 44, 52, 541, 53, 54, 54, 55, 55, 55, 56, 69, 81, 70, 57, 45, 58, 73, 59, 59, 60, 58, 82, 63, 63, 63, 49, - 77, 61, 74, 545, 83, 84, 61, 78, 75, 95, + 77, 61, 74, 543, 83, 84, 61, 78, 75, 95, 62, 87, 48, 85, 79, 86, 61, 92, 93, 88, 80, 61, 89, 96, 102, 99, 104, 103, 113, 97, @@ -543,115 +543,113 @@ static tao_yyconst short int tao_yy_nxt[1105] = 49, 46, 182, 101, 46, 119, 108, 109, 119, 110, 120, 116, 152, 183, 118, 121, 122, 122, 123, 130, 144, 145, 130, 131, 135, 164, 165, 124, 124, 124, - 136, 136, 240, 241, 122, 55, 55, 55, 145, 58, + 136, 136, 238, 239, 122, 55, 55, 55, 145, 58, 153, 138, 138, 60, 146, 146, 146, 174, 191, 137, 180, 61, 204, 125, 192, 181, 126, 175, 196, 127, - 139, 197, 205, 128, 275, 58, 61, 140, 140, 140, + 139, 197, 205, 128, 273, 58, 61, 140, 140, 140, - 119, 48, 533, 119, 137, 120, 276, 61, 58, 48, - 59, 59, 60, 550, 58, 139, 60, 60, 60, 550, - 61, 543, 61, 55, 55, 55, 61, 130, 538, 49, - 130, 131, 537, 141, 142, 61, 142, 49, 147, 147, + 119, 48, 531, 119, 137, 120, 274, 61, 58, 48, + 59, 59, 60, 548, 58, 139, 60, 60, 60, 548, + 61, 541, 61, 55, 55, 55, 61, 130, 536, 49, + 130, 131, 535, 141, 142, 61, 142, 49, 147, 147, 152, 61, 148, 148, 148, 122, 122, 212, 141, 142, - 58, 536, 63, 63, 63, 142, 124, 124, 124, 219, - 144, 145, 61, 122, 230, 220, 220, 58, 153, 138, - 138, 60, 58, 535, 140, 140, 140, 61, 145, 61, - 227, 223, 223, 227, 61, 224, 224, 224, 144, 145, - 148, 148, 148, 266, 61, 366, 148, 148, 148, 61, - - 420, 227, 267, 420, 227, 228, 145, 225, 302, 225, - 502, 231, 314, 315, 303, 303, 224, 224, 224, 360, - 360, 361, 225, 224, 224, 224, 228, 524, 225, 294, - 295, 295, 296, 352, 142, 550, 142, 360, 353, 523, - 400, 297, 297, 297, 522, 354, 463, 464, 295, 142, - 295, 295, 367, 521, 465, 142, 401, 465, 470, 470, - 471, 297, 297, 297, 464, 520, 503, 298, 295, 503, - 299, 422, 507, 300, 422, 507, 470, 301, 152, 417, - 418, 418, 417, 423, 423, 423, 372, 372, 372, 519, - 152, 419, 419, 419, 372, 372, 372, 372, 418, 463, - - 464, 463, 464, 518, 517, 516, 153, 372, 372, 372, - 372, 372, 372, 431, 431, 431, 534, 464, 153, 464, - 515, 431, 431, 431, 431, 511, 511, 511, 417, 418, - 418, 417, 499, 500, 431, 431, 431, 431, 431, 431, - 461, 461, 461, 417, 418, 418, 417, 418, 514, 532, - 500, 422, 532, 513, 422, 419, 419, 419, 544, 373, - 512, 544, 418, 423, 423, 423, 466, 467, 467, 466, - 468, 418, 418, 466, 467, 467, 466, 468, 423, 423, - 423, 508, 461, 461, 461, 467, 476, 476, 476, 418, - 502, 497, 467, 496, 476, 476, 476, 476, 495, 499, - - 500, 504, 505, 505, 504, 499, 500, 476, 476, 476, - 476, 476, 476, 506, 506, 506, 509, 500, 494, 510, - 505, 467, 467, 500, 526, 527, 493, 492, 511, 511, - 511, 504, 505, 505, 504, 504, 505, 505, 504, 467, - 530, 531, 527, 528, 528, 528, 491, 506, 506, 506, - 505, 490, 509, 489, 505, 510, 509, 488, 531, 510, - 533, 526, 527, 487, 511, 511, 511, 486, 511, 511, - 511, 526, 527, 505, 505, 530, 531, 530, 531, 527, - 540, 541, 540, 541, 528, 528, 528, 540, 541, 527, - 485, 505, 484, 531, 483, 531, 546, 546, 541, 482, - - 541, 548, 549, 548, 549, 541, 548, 549, 481, 480, - 479, 478, 373, 475, 546, 474, 473, 472, 426, 549, - 469, 549, 460, 459, 549, 47, 47, 47, 47, 47, - 47, 47, 47, 50, 458, 50, 50, 50, 50, 50, - 50, 67, 67, 67, 67, 132, 132, 457, 456, 132, - 132, 134, 455, 134, 134, 134, 134, 134, 134, 143, - 143, 143, 143, 143, 143, 143, 143, 149, 454, 149, - 151, 151, 151, 151, 151, 151, 151, 151, 154, 453, - 154, 154, 154, 154, 154, 154, 221, 221, 452, 221, - 222, 451, 222, 288, 288, 288, 288, 288, 288, 288, - - 288, 305, 305, 450, 305, 307, 449, 307, 308, 448, - 308, 374, 374, 447, 374, 425, 425, 425, 425, 425, - 425, 425, 425, 432, 432, 446, 432, 462, 462, 462, - 462, 462, 462, 462, 462, 477, 477, 445, 477, 498, - 498, 498, 498, 498, 498, 498, 498, 501, 501, 501, - 501, 501, 501, 501, 501, 525, 525, 525, 525, 525, - 525, 525, 525, 529, 529, 529, 529, 529, 529, 529, - 529, 539, 539, 539, 539, 539, 539, 539, 539, 542, - 542, 542, 542, 542, 542, 542, 542, 547, 547, 547, - 547, 547, 547, 547, 547, 444, 443, 442, 441, 440, - - 439, 438, 437, 436, 435, 434, 433, 373, 430, 429, - 428, 427, 366, 426, 424, 421, 416, 415, 414, 413, - 412, 411, 410, 409, 408, 407, 406, 405, 404, 403, - 402, 399, 398, 397, 396, 395, 394, 393, 392, 391, - 390, 389, 388, 387, 386, 385, 384, 383, 382, 381, - 380, 379, 378, 377, 376, 375, 373, 304, 302, 371, - 370, 369, 368, 550, 365, 364, 363, 362, 289, 359, - 358, 357, 356, 355, 351, 350, 349, 348, 347, 346, - 345, 344, 343, 342, 341, 340, 339, 338, 337, 336, - 335, 334, 333, 332, 331, 330, 329, 328, 327, 326, - - 325, 324, 323, 322, 321, 320, 319, 318, 317, 316, - 313, 312, 311, 310, 309, 69, 306, 304, 293, 292, - 291, 290, 211, 289, 287, 286, 285, 284, 283, 282, - 281, 280, 279, 278, 277, 274, 273, 272, 271, 270, - 269, 268, 265, 264, 263, 262, 261, 260, 259, 258, - 257, 256, 255, 254, 253, 252, 251, 250, 249, 248, - 247, 246, 245, 244, 243, 242, 239, 238, 237, 236, - 235, 234, 233, 232, 230, 229, 226, 218, 218, 218, - 217, 216, 215, 214, 213, 211, 210, 209, 208, 207, - 206, 203, 202, 201, 200, 199, 198, 195, 194, 193, - - 190, 189, 188, 187, 186, 185, 184, 179, 178, 177, - 176, 173, 172, 171, 170, 169, 168, 167, 166, 163, - 162, 161, 160, 159, 158, 157, 156, 155, 150, 133, - 129, 98, 94, 91, 90, 76, 72, 71, 68, 66, - 65, 64, 51, 550, 3, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - - 550, 550, 550, 550 + 58, 534, 63, 63, 63, 142, 124, 124, 124, 219, + 144, 145, 61, 122, 228, 220, 220, 58, 153, 138, + 138, 60, 58, 364, 140, 140, 140, 61, 145, 61, + 418, 223, 223, 418, 61, 224, 224, 224, 144, 145, + 148, 148, 148, 264, 61, 533, 148, 148, 148, 61, + + 312, 313, 265, 224, 224, 224, 145, 225, 300, 225, + 152, 229, 500, 548, 301, 301, 522, 358, 358, 359, + 521, 350, 225, 224, 224, 224, 351, 520, 225, 292, + 293, 293, 294, 352, 142, 358, 142, 398, 153, 519, + 518, 295, 295, 295, 517, 293, 293, 365, 293, 142, + 461, 462, 516, 399, 515, 142, 295, 295, 295, 514, + 513, 463, 420, 293, 463, 420, 501, 296, 462, 501, + 297, 461, 462, 298, 421, 421, 421, 299, 152, 415, + 416, 416, 415, 468, 468, 469, 370, 370, 370, 462, + 512, 417, 417, 417, 370, 370, 370, 370, 416, 461, + + 462, 468, 497, 498, 511, 371, 153, 370, 370, 370, + 370, 370, 370, 429, 429, 429, 505, 462, 510, 505, + 498, 429, 429, 429, 429, 506, 500, 495, 415, 416, + 416, 415, 497, 498, 429, 429, 429, 429, 429, 429, + 459, 459, 459, 415, 416, 416, 415, 416, 494, 530, + 498, 420, 530, 493, 420, 417, 417, 417, 542, 492, + 491, 542, 416, 421, 421, 421, 464, 465, 465, 464, + 466, 416, 416, 464, 465, 465, 464, 466, 421, 421, + 421, 490, 459, 459, 459, 465, 474, 474, 474, 416, + 489, 488, 465, 487, 474, 474, 474, 474, 486, 497, + + 498, 502, 503, 503, 502, 465, 465, 474, 474, 474, + 474, 474, 474, 504, 504, 504, 507, 498, 485, 508, + 503, 524, 525, 465, 502, 503, 503, 502, 509, 509, + 509, 484, 502, 503, 503, 502, 526, 526, 526, 525, + 528, 529, 483, 503, 504, 504, 504, 507, 482, 481, + 508, 503, 507, 480, 479, 508, 531, 478, 529, 509, + 509, 509, 532, 477, 509, 509, 509, 524, 525, 524, + 525, 509, 509, 509, 528, 529, 476, 503, 503, 528, + 529, 538, 539, 538, 539, 525, 371, 525, 526, 526, + 526, 473, 529, 538, 539, 503, 472, 529, 471, 539, + + 470, 539, 544, 544, 546, 547, 546, 547, 546, 547, + 424, 539, 467, 458, 457, 456, 455, 454, 453, 452, + 544, 451, 547, 450, 547, 449, 547, 47, 47, 47, + 47, 47, 47, 47, 47, 50, 448, 50, 50, 50, + 50, 50, 50, 67, 67, 67, 67, 132, 132, 447, + 446, 132, 132, 134, 445, 134, 134, 134, 134, 134, + 134, 143, 143, 143, 143, 143, 143, 143, 143, 149, + 444, 149, 151, 151, 151, 151, 151, 151, 151, 151, + 154, 443, 154, 154, 154, 154, 154, 154, 221, 221, + 442, 221, 222, 441, 222, 286, 286, 286, 286, 286, + + 286, 286, 286, 303, 303, 440, 303, 305, 439, 305, + 306, 438, 306, 372, 372, 437, 372, 423, 423, 423, + 423, 423, 423, 423, 423, 430, 430, 436, 430, 460, + 460, 460, 460, 460, 460, 460, 460, 475, 475, 435, + 475, 496, 496, 496, 496, 496, 496, 496, 496, 499, + 499, 499, 499, 499, 499, 499, 499, 523, 523, 523, + 523, 523, 523, 523, 523, 527, 527, 527, 527, 527, + 527, 527, 527, 537, 537, 537, 537, 537, 537, 537, + 537, 540, 540, 540, 540, 540, 540, 540, 540, 545, + 545, 545, 545, 545, 545, 545, 545, 434, 433, 432, + + 431, 371, 428, 427, 426, 425, 364, 424, 422, 419, + 414, 413, 412, 411, 410, 409, 408, 407, 406, 405, + 404, 403, 402, 401, 400, 397, 396, 395, 394, 393, + 392, 391, 390, 389, 388, 387, 386, 385, 384, 383, + 382, 381, 380, 379, 378, 377, 376, 375, 374, 373, + 371, 302, 300, 369, 368, 367, 366, 548, 363, 362, + 361, 360, 287, 357, 356, 355, 354, 353, 349, 348, + 347, 346, 345, 344, 343, 342, 341, 340, 339, 338, + 337, 336, 335, 334, 333, 332, 331, 330, 329, 328, + 327, 326, 325, 324, 323, 322, 321, 320, 319, 318, + + 317, 316, 315, 314, 311, 310, 309, 308, 307, 304, + 302, 291, 290, 289, 288, 211, 287, 285, 284, 283, + 282, 281, 280, 279, 278, 277, 276, 275, 272, 271, + 270, 269, 268, 267, 266, 263, 262, 261, 260, 259, + 258, 257, 256, 255, 254, 253, 252, 251, 250, 249, + 248, 247, 246, 245, 244, 243, 242, 241, 240, 237, + 236, 235, 234, 233, 232, 231, 230, 228, 227, 226, + 218, 218, 218, 217, 216, 215, 214, 213, 211, 210, + 209, 208, 207, 206, 203, 202, 201, 200, 199, 198, + 195, 194, 193, 190, 189, 188, 187, 186, 185, 184, + + 179, 178, 177, 176, 173, 172, 171, 170, 169, 168, + 167, 166, 163, 162, 161, 160, 159, 158, 157, 156, + 155, 150, 133, 129, 98, 94, 91, 90, 76, 72, + 71, 68, 66, 65, 64, 51, 548, 3, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548 } ; -static tao_yyconst short int tao_yy_chk[1105] = +static tao_yyconst short int tao_yy_chk[1098] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -659,10 +657,10 @@ static tao_yyconst short int tao_yy_chk[1105] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 5, 8, 2, 5, 2, 10, 542, 10, 10, 10, + 5, 8, 2, 5, 2, 10, 540, 10, 10, 10, 11, 11, 11, 12, 20, 26, 20, 12, 2, 13, 23, 13, 13, 13, 14, 26, 14, 14, 14, 8, - 25, 13, 23, 537, 27, 27, 14, 25, 23, 33, + 25, 13, 23, 535, 27, 27, 14, 25, 23, 33, 13, 28, 47, 27, 25, 27, 13, 31, 31, 28, 25, 14, 28, 33, 36, 35, 37, 36, 40, 33, @@ -675,106 +673,104 @@ static tao_yyconst short int tao_yy_chk[1105] = 93, 53, 113, 44, 102, 93, 44, 88, 106, 44, 53, 106, 113, 44, 199, 54, 53, 54, 54, 54, - 119, 131, 534, 119, 51, 119, 199, 54, 59, 132, + 119, 131, 532, 119, 51, 119, 199, 54, 59, 132, 59, 59, 59, 121, 60, 53, 60, 60, 60, 121, - 59, 533, 54, 55, 55, 55, 60, 130, 523, 131, - 130, 130, 522, 55, 55, 59, 55, 132, 61, 61, + 59, 531, 54, 55, 55, 55, 60, 130, 521, 131, + 130, 130, 520, 55, 55, 59, 55, 132, 61, 61, 151, 60, 61, 61, 61, 124, 124, 124, 55, 55, - 63, 519, 63, 63, 63, 55, 124, 124, 124, 136, + 63, 517, 63, 63, 63, 55, 124, 124, 124, 136, 143, 143, 63, 124, 155, 136, 136, 138, 151, 138, - 138, 138, 140, 512, 140, 140, 140, 63, 143, 138, - 152, 141, 141, 152, 140, 141, 141, 141, 145, 145, - 147, 147, 147, 191, 138, 296, 148, 148, 148, 140, - - 362, 227, 191, 362, 227, 152, 145, 148, 220, 148, - 501, 155, 240, 240, 220, 220, 223, 223, 223, 289, - 289, 289, 148, 224, 224, 224, 227, 497, 148, 217, - 217, 217, 217, 280, 224, 296, 224, 289, 280, 495, - 341, 217, 217, 217, 494, 280, 420, 420, 217, 224, - 297, 297, 297, 492, 421, 224, 341, 421, 426, 426, - 426, 297, 297, 297, 420, 489, 469, 217, 297, 469, - 217, 364, 472, 217, 364, 472, 426, 217, 307, 361, - 361, 361, 361, 364, 364, 364, 307, 307, 307, 487, - 476, 361, 361, 361, 307, 307, 307, 307, 361, 462, - - 462, 464, 464, 485, 484, 483, 307, 307, 307, 307, - 307, 307, 307, 372, 372, 372, 511, 462, 476, 464, - 482, 372, 372, 372, 372, 511, 511, 511, 417, 417, - 417, 417, 465, 465, 372, 372, 372, 372, 372, 372, - 417, 417, 417, 419, 419, 419, 419, 417, 480, 508, - 465, 422, 508, 479, 422, 419, 419, 419, 535, 477, - 475, 535, 419, 422, 422, 422, 423, 423, 423, 423, - 423, 461, 461, 466, 466, 466, 466, 466, 423, 423, - 423, 473, 461, 461, 461, 423, 431, 431, 431, 461, - 468, 459, 466, 458, 431, 431, 431, 431, 457, 498, - - 498, 471, 471, 471, 471, 500, 500, 431, 431, 431, - 431, 431, 431, 471, 471, 471, 474, 498, 455, 474, - 471, 502, 502, 500, 503, 503, 454, 453, 474, 474, - 474, 504, 504, 504, 504, 506, 506, 506, 506, 502, - 507, 507, 503, 504, 504, 504, 452, 506, 506, 506, - 504, 451, 509, 450, 506, 509, 510, 449, 507, 510, - 510, 525, 525, 447, 509, 509, 509, 446, 510, 510, - 510, 527, 527, 528, 528, 529, 529, 531, 531, 525, - 532, 532, 539, 539, 528, 528, 528, 541, 541, 527, - 444, 528, 443, 529, 441, 531, 543, 543, 532, 440, - - 539, 544, 544, 547, 547, 541, 549, 549, 437, 436, - 434, 433, 432, 430, 543, 429, 428, 427, 425, 544, - 424, 547, 416, 415, 549, 551, 551, 551, 551, 551, - 551, 551, 551, 552, 414, 552, 552, 552, 552, 552, - 552, 553, 553, 553, 553, 554, 554, 413, 411, 554, - 554, 555, 410, 555, 555, 555, 555, 555, 555, 556, - 556, 556, 556, 556, 556, 556, 556, 557, 408, 557, - 558, 558, 558, 558, 558, 558, 558, 558, 559, 405, - 559, 559, 559, 559, 559, 559, 560, 560, 404, 560, - 561, 403, 561, 562, 562, 562, 562, 562, 562, 562, - - 562, 563, 563, 401, 563, 564, 399, 564, 565, 398, - 565, 566, 566, 397, 566, 567, 567, 567, 567, 567, - 567, 567, 567, 568, 568, 394, 568, 569, 569, 569, - 569, 569, 569, 569, 569, 570, 570, 392, 570, 571, - 571, 571, 571, 571, 571, 571, 571, 572, 572, 572, - 572, 572, 572, 572, 572, 573, 573, 573, 573, 573, - 573, 573, 573, 574, 574, 574, 574, 574, 574, 574, - 574, 575, 575, 575, 575, 575, 575, 575, 575, 576, - 576, 576, 576, 576, 576, 576, 576, 577, 577, 577, - 577, 577, 577, 577, 577, 391, 389, 387, 386, 385, - - 383, 381, 380, 379, 378, 377, 376, 374, 371, 370, - 369, 368, 367, 366, 365, 363, 359, 357, 356, 354, - 353, 352, 351, 350, 349, 348, 347, 345, 344, 343, - 342, 340, 339, 338, 337, 335, 334, 333, 332, 330, - 328, 327, 324, 323, 322, 321, 319, 318, 317, 316, - 315, 313, 312, 311, 310, 309, 308, 305, 303, 301, - 300, 299, 298, 294, 293, 292, 291, 290, 288, 287, - 286, 284, 282, 281, 279, 278, 277, 276, 275, 274, - 273, 272, 271, 270, 269, 268, 267, 266, 265, 264, - 263, 262, 261, 260, 258, 257, 256, 255, 253, 252, - - 251, 250, 249, 248, 247, 245, 244, 243, 242, 241, - 239, 236, 235, 234, 232, 228, 226, 221, 216, 215, - 214, 213, 212, 211, 210, 209, 208, 207, 206, 205, - 204, 203, 202, 201, 200, 198, 197, 196, 195, 194, - 193, 192, 189, 188, 187, 186, 185, 184, 183, 182, - 181, 180, 179, 178, 177, 176, 175, 174, 173, 172, - 171, 170, 169, 168, 167, 166, 164, 163, 162, 161, - 160, 158, 157, 156, 154, 153, 150, 137, 135, 134, - 129, 128, 127, 126, 125, 123, 118, 117, 116, 115, - 114, 112, 111, 110, 109, 108, 107, 105, 104, 103, - - 101, 100, 99, 98, 97, 96, 95, 92, 91, 90, - 89, 87, 86, 85, 84, 83, 82, 81, 80, 78, - 77, 76, 75, 74, 73, 72, 71, 70, 68, 50, - 45, 34, 32, 30, 29, 24, 22, 21, 19, 17, - 16, 15, 9, 3, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - - 550, 550, 550, 550 + 138, 138, 140, 294, 140, 140, 140, 63, 143, 138, + 360, 141, 141, 360, 140, 141, 141, 141, 145, 145, + 147, 147, 147, 191, 138, 510, 148, 148, 148, 140, + + 238, 238, 191, 223, 223, 223, 145, 148, 220, 148, + 474, 155, 499, 294, 220, 220, 495, 287, 287, 287, + 493, 278, 148, 224, 224, 224, 278, 492, 148, 217, + 217, 217, 217, 278, 224, 287, 224, 339, 474, 490, + 487, 217, 217, 217, 485, 295, 295, 295, 217, 224, + 418, 418, 483, 339, 482, 224, 295, 295, 295, 481, + 480, 419, 362, 295, 419, 362, 467, 217, 418, 467, + 217, 460, 460, 217, 362, 362, 362, 217, 305, 359, + 359, 359, 359, 424, 424, 424, 305, 305, 305, 460, + 478, 359, 359, 359, 305, 305, 305, 305, 359, 462, + + 462, 424, 463, 463, 477, 475, 305, 305, 305, 305, + 305, 305, 305, 370, 370, 370, 470, 462, 473, 470, + 463, 370, 370, 370, 370, 471, 466, 457, 415, 415, + 415, 415, 496, 496, 370, 370, 370, 370, 370, 370, + 415, 415, 415, 417, 417, 417, 417, 415, 456, 506, + 496, 420, 506, 455, 420, 417, 417, 417, 533, 453, + 452, 533, 417, 420, 420, 420, 421, 421, 421, 421, + 421, 459, 459, 464, 464, 464, 464, 464, 421, 421, + 421, 451, 459, 459, 459, 421, 429, 429, 429, 459, + 450, 449, 464, 448, 429, 429, 429, 429, 447, 498, + + 498, 469, 469, 469, 469, 500, 500, 429, 429, 429, + 429, 429, 429, 469, 469, 469, 472, 498, 445, 472, + 469, 501, 501, 500, 502, 502, 502, 502, 472, 472, + 472, 444, 504, 504, 504, 504, 502, 502, 502, 501, + 505, 505, 442, 502, 504, 504, 504, 507, 441, 439, + 507, 504, 508, 438, 435, 508, 508, 434, 505, 507, + 507, 507, 509, 432, 508, 508, 508, 523, 523, 525, + 525, 509, 509, 509, 527, 527, 431, 526, 526, 529, + 529, 530, 530, 537, 537, 523, 430, 525, 526, 526, + 526, 428, 527, 539, 539, 526, 427, 529, 426, 530, + + 425, 537, 541, 541, 542, 542, 545, 545, 547, 547, + 423, 539, 422, 414, 413, 412, 411, 409, 408, 406, + 541, 403, 542, 402, 545, 401, 547, 549, 549, 549, + 549, 549, 549, 549, 549, 550, 399, 550, 550, 550, + 550, 550, 550, 551, 551, 551, 551, 552, 552, 397, + 396, 552, 552, 553, 395, 553, 553, 553, 553, 553, + 553, 554, 554, 554, 554, 554, 554, 554, 554, 555, + 392, 555, 556, 556, 556, 556, 556, 556, 556, 556, + 557, 390, 557, 557, 557, 557, 557, 557, 558, 558, + 389, 558, 559, 387, 559, 560, 560, 560, 560, 560, + + 560, 560, 560, 561, 561, 385, 561, 562, 384, 562, + 563, 383, 563, 564, 564, 381, 564, 565, 565, 565, + 565, 565, 565, 565, 565, 566, 566, 379, 566, 567, + 567, 567, 567, 567, 567, 567, 567, 568, 568, 378, + 568, 569, 569, 569, 569, 569, 569, 569, 569, 570, + 570, 570, 570, 570, 570, 570, 570, 571, 571, 571, + 571, 571, 571, 571, 571, 572, 572, 572, 572, 572, + 572, 572, 572, 573, 573, 573, 573, 573, 573, 573, + 573, 574, 574, 574, 574, 574, 574, 574, 574, 575, + 575, 575, 575, 575, 575, 575, 575, 377, 376, 375, + + 374, 372, 369, 368, 367, 366, 365, 364, 363, 361, + 357, 355, 354, 352, 351, 350, 349, 348, 347, 346, + 345, 343, 342, 341, 340, 338, 337, 336, 335, 333, + 332, 331, 330, 328, 326, 325, 322, 321, 320, 319, + 317, 316, 315, 314, 313, 311, 310, 309, 308, 307, + 306, 303, 301, 299, 298, 297, 296, 292, 291, 290, + 289, 288, 286, 285, 284, 282, 280, 279, 277, 276, + 275, 274, 273, 272, 271, 270, 269, 268, 267, 266, + 265, 264, 263, 262, 261, 260, 259, 258, 256, 255, + 254, 253, 251, 250, 249, 248, 247, 246, 245, 243, + + 242, 241, 240, 239, 237, 234, 233, 232, 230, 226, + 221, 216, 215, 214, 213, 212, 211, 210, 209, 208, + 207, 206, 205, 204, 203, 202, 201, 200, 198, 197, + 196, 195, 194, 193, 192, 189, 188, 187, 186, 185, + 184, 183, 182, 181, 180, 179, 178, 177, 176, 175, + 174, 173, 172, 171, 170, 169, 168, 167, 166, 164, + 163, 162, 161, 160, 158, 157, 156, 154, 153, 150, + 137, 135, 134, 129, 128, 127, 126, 125, 123, 118, + 117, 116, 115, 114, 112, 111, 110, 109, 108, 107, + 105, 104, 103, 101, 100, 99, 98, 97, 96, 95, + + 92, 91, 90, 89, 87, 86, 85, 84, 83, 82, + 81, 80, 78, 77, 76, 75, 74, 73, 72, 71, + 70, 68, 50, 45, 34, 32, 30, 29, 24, 22, + 21, 19, 17, 16, 15, 9, 3, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548, 548, 548, 548, + 548, 548, 548, 548, 548, 548, 548 } ; @@ -1116,13 +1112,13 @@ tao_yy_match: while ( tao_yy_chk[tao_yy_base[tao_yy_current_state] + tao_yy_c] != tao_yy_current_state ) { tao_yy_current_state = (int) tao_yy_def[tao_yy_current_state]; - if ( tao_yy_current_state >= 551 ) + if ( tao_yy_current_state >= 549 ) tao_yy_c = tao_yy_meta[(unsigned int) tao_yy_c]; } tao_yy_current_state = tao_yy_nxt[tao_yy_base[tao_yy_current_state] + (unsigned int) tao_yy_c]; ++tao_yy_cp; } - while ( tao_yy_current_state != 550 ); + while ( tao_yy_base[tao_yy_current_state] != 1038 ); tao_yy_find_action: tao_yy_act = tao_yy_accept[tao_yy_current_state]; @@ -1972,7 +1968,7 @@ static tao_yy_state_type tao_yy_get_previous_state() while ( tao_yy_chk[tao_yy_base[tao_yy_current_state] + tao_yy_c] != tao_yy_current_state ) { tao_yy_current_state = (int) tao_yy_def[tao_yy_current_state]; - if ( tao_yy_current_state >= 551 ) + if ( tao_yy_current_state >= 549 ) tao_yy_c = tao_yy_meta[(unsigned int) tao_yy_c]; } tao_yy_current_state = tao_yy_nxt[tao_yy_base[tao_yy_current_state] + (unsigned int) tao_yy_c]; @@ -2007,11 +2003,11 @@ tao_yy_state_type tao_yy_current_state; while ( tao_yy_chk[tao_yy_base[tao_yy_current_state] + tao_yy_c] != tao_yy_current_state ) { tao_yy_current_state = (int) tao_yy_def[tao_yy_current_state]; - if ( tao_yy_current_state >= 551 ) + if ( tao_yy_current_state >= 549 ) tao_yy_c = tao_yy_meta[(unsigned int) tao_yy_c]; } tao_yy_current_state = tao_yy_nxt[tao_yy_base[tao_yy_current_state] + (unsigned int) tao_yy_c]; - tao_yy_is_jam = (tao_yy_current_state == 550); + tao_yy_is_jam = (tao_yy_current_state == 548); return tao_yy_is_jam ? 0 : tao_yy_current_state; } @@ -3052,72 +3048,72 @@ idl_escape_reader( { if (str[0] != '\\') { - return str[0]; + return str[0]; } switch (str[1]) { case 'n': - return '\n'; + return '\n'; case 't': - return '\t'; + return '\t'; case 'v': - return '\v'; + return '\v'; case 'b': - return '\b'; + return '\b'; case 'r': - return '\r'; + return '\r'; case 'f': - return '\f'; + return '\f'; case 'a': - return '\a'; + return '\a'; case '\\': - return '\\'; + return '\\'; case '\?': - return '?'; + return '?'; case '\'': - return '\''; + return '\''; case '"': - return '"'; + return '"'; case 'x': - { - int i; + { + int i; - // hex value - for (i = 2; str[i] != '\0' && isxdigit(str[i]); ++i) + // hex value + for (i = 2; str[i] != '\0' && isxdigit(str[i]); ++i) { - continue; - } - - char save = str[i]; - str[i] = '\0'; - char out = (char)idl_atoui(&str[2], 16); - str[i] = save; - return out; - } - ACE_NOTREACHED (break;) + continue; + } + + char save = str[i]; + str[i] = '\0'; + char out = (char)idl_atoui(&str[2], 16); + str[i] = save; + return out; + } + ACE_NOTREACHED (break;) default: - // check for octal value - if (str[1] >= '0' && str[1] <= '7') + // check for octal value + if (str[1] >= '0' && str[1] <= '7') { - int i; + int i; - for (i = 1; str[i] >= '0' && str[i] <= '7'; ++i) + for (i = 1; str[i] >= '0' && str[i] <= '7'; ++i) { - continue; - } - - char save = str[i]; - str[i] = '\0'; - char out = (char)idl_atoui(&str[1], 8); - str[i] = save; - return out; - } + continue; + } + + char save = str[i]; + str[i] = '\0'; + char out = (char)idl_atoui(&str[1], 8); + str[i] = save; + return out; + } else { - return str[1] - 'a'; - } - ACE_NOTREACHED (break;) + return str[1] - 'a'; + } + ACE_NOTREACHED (break;) } } /* diff --git a/TAO/TAO_IDL/fe/lex.yy.cpp.diff b/TAO/TAO_IDL/fe/lex.yy.cpp.diff index 652a0a770c8..a15d85b93f6 100644 --- a/TAO/TAO_IDL/fe/lex.yy.cpp.diff +++ b/TAO/TAO_IDL/fe/lex.yy.cpp.diff @@ -1,3989 +1,140 @@ ---- lex.yy.cpp.new 2004-08-27 21:34:13.000000000 -0500 -+++ lex.yy.cpp 2004-08-27 21:53:40.000000000 -0500 -@@ -1,369 +1,290 @@ --lex -L -t fe/idl.ll -- --#line 3 "<stdout>" -- --#define YY_INT_ALIGNED short int -- - /* A lexical scanner generated by flex */ - -+/* Scanner skeleton version: -+ * $Id$ -+ */ -+ - #define FLEX_SCANNER --#define YY_FLEX_MAJOR_VERSION 2 --#define YY_FLEX_MINOR_VERSION 5 --#define YY_FLEX_SUBMINOR_VERSION 31 --#if YY_FLEX_SUBMINOR_VERSION > 0 --#define FLEX_BETA --#endif -+#define TAO_YY_FLEX_MAJOR_VERSION 2 -+#define TAO_YY_FLEX_MINOR_VERSION 5 - --/* First, we deal with platform-specific or compiler-specific issues. */ - --/* begin standard C headers. */ --#include <stdio.h> --#include <string.h> --#include <errno.h> --#include <stdlib.h> - --/* end standard C headers. */ -+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ -+#ifdef c_plusplus -+#ifndef __cplusplus -+#define __cplusplus -+#endif -+#endif - --/* flex integer type definitions */ - --#ifndef FLEXINT_H --#define FLEXINT_H -+#ifdef __cplusplus - --/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ -+#include "ace/os_include/os_stdio.h" -+#include "ace/os_include/os_ctype.h" - --#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L --#include <inttypes.h> --typedef int8_t flex_int8_t; --typedef uint8_t flex_uint8_t; --typedef int16_t flex_int16_t; --typedef uint16_t flex_uint16_t; --typedef int32_t flex_int32_t; --typedef uint32_t flex_uint32_t; --#else --typedef signed char flex_int8_t; --typedef short int flex_int16_t; --typedef int flex_int32_t; --typedef unsigned char flex_uint8_t; --typedef unsigned short int flex_uint16_t; --typedef unsigned int flex_uint32_t; --#endif /* ! C99 */ -+/* Use prototypes in function declarations. */ -+#define TAO_YY_USE_PROTOS - --/* Limits of integral types. */ --#ifndef INT8_MIN --#define INT8_MIN (-128) --#endif --#ifndef INT16_MIN --#define INT16_MIN (-32767-1) --#endif --#ifndef INT32_MIN --#define INT32_MIN (-2147483647-1) --#endif --#ifndef INT8_MAX --#define INT8_MAX (127) --#endif --#ifndef INT16_MAX --#define INT16_MAX (32767) --#endif --#ifndef INT32_MAX --#define INT32_MAX (2147483647) --#endif --#ifndef UINT8_MAX --#define UINT8_MAX (255U) --#endif --#ifndef UINT16_MAX --#define UINT16_MAX (65535U) --#endif --#ifndef UINT32_MAX --#define UINT32_MAX (4294967295U) --#endif -+/* The "const" storage-class-modifier is valid. */ -+#define TAO_YY_USE_CONST - --#endif /* ! FLEXINT_H */ -+#else /* ! __cplusplus */ - --#ifdef __cplusplus -+#ifdef __STDC__ - --/* The "const" storage-class-modifier is valid. */ --#define YY_USE_CONST -+#define TAO_YY_USE_PROTOS -+#define TAO_YY_USE_CONST - --#else /* ! __cplusplus */ -+#endif /* __STDC__ */ -+#endif /* ! __cplusplus */ +--- lex.yy.cpp Sat Jul 27 17:02:23 2002 ++++ lex.yy.cpp.new Sat Jul 27 17:02:00 2002 +@@ -31,5 +28,5 @@ + #else /* ! __cplusplus */ -#if __STDC__ -+#ifdef __TURBOC__ -+ #pragma warn -rch -+ #pragma warn -use -+#define TAO_YY_USE_CONST -+#define TAO_YY_USE_PROTOS -+#endif - --#define YY_USE_CONST -+#ifdef TAO_YY_USE_CONST -+#define tao_yyconst const -+#else -+#define tao_yyconst -+#endif - --#endif /* __STDC__ */ --#endif /* ! __cplusplus */ - --#ifdef YY_USE_CONST --#define yyconst const -+#ifdef TAO_YY_USE_PROTOS -+#define TAO_YY_PROTO(proto) proto - #else --#define yyconst -+#define TAO_YY_PROTO(proto) () - #endif - - /* Returned upon end-of-file. */ --#define YY_NULL 0 -+#define TAO_YY_NULL 0 - - /* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ --#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) -+#define TAO_YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - - /* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ --#define BEGIN (yy_start) = 1 + 2 * -+#define BEGIN tao_yy_start = 1 + 2 * - - /* Translate the current start state into a value that can be later handed -- * to BEGIN to return to the state. The YYSTATE alias is for lex -+ * to BEGIN to return to the state. The TAO_YYSTATE alias is for lex - * compatibility. - */ --#define YY_START (((yy_start) - 1) / 2) --#define YYSTATE YY_START -+#define TAO_YY_START ((tao_yy_start - 1) / 2) -+#define TAO_YYSTATE TAO_YY_START - - /* Action number for EOF rule of a given start state. */ --#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) -+#define TAO_YY_STATE_EOF(state) (TAO_YY_END_OF_BUFFER + state + 1) - - /* Special action meaning "start processing a new file". */ --#define YY_NEW_FILE yyrestart(yyin ) -+#define TAO_YY_NEW_FILE tao_yyrestart( tao_yyin ) - --#define YY_END_OF_BUFFER_CHAR 0 -+#define TAO_YY_END_OF_BUFFER_CHAR 0 - - /* Size of default input buffer. */ --#ifndef YY_BUF_SIZE --#define YY_BUF_SIZE 16384 --#endif -- --#ifndef YY_TYPEDEF_YY_BUFFER_STATE --#define YY_TYPEDEF_YY_BUFFER_STATE --typedef struct yy_buffer_state *YY_BUFFER_STATE; --#endif -+#define TAO_YY_BUF_SIZE 16384 - --extern int yyleng; -+typedef struct tao_yy_buffer_state *TAO_YY_BUFFER_STATE; - --extern FILE *yyin, *yyout; -+extern int tao_yyleng; -+extern FILE *tao_yyin, *tao_yyout; - - #define EOB_ACT_CONTINUE_SCAN 0 - #define EOB_ACT_END_OF_FILE 1 - #define EOB_ACT_LAST_MATCH 2 - -- #define YY_LESS_LINENO(n) -- --/* Return all but the first "n" matched characters back to the input stream. */ --#define yyless(n) \ -- do \ -- { \ -- /* Undo effects of setting up yytext. */ \ -- int yyless_macro_arg = (n); \ -- YY_LESS_LINENO(yyless_macro_arg);\ -- *yy_cp = (yy_hold_char); \ -- YY_RESTORE_YY_MORE_OFFSET \ -- (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ -- YY_DO_BEFORE_ACTION; /* set up yytext again */ \ -- } \ -- while ( 0 ) -+/* The funky do-while in the following #define is used to turn the definition -+ * int a single C statement (which needs a semi-colon terminator). This -+ * avoids problems with code like: -+ * -+ * if ( condition_holds ) -+ * tao_yyless( 5 ); -+ * else -+ * do_something_else(); -+ * -+ * Prior to using the do-while the compiler would get upset at the -+ * "else" because it interpreted the "if" statement as being all -+ * done when it reached the ';' after the tao_yyless() call. -+ */ -+ -+/* Return all but the first 'n' matched characters back to the input stream. */ -+ -+#define tao_yyless(n) \ -+ do \ -+ { \ -+ /* Undo effects of setting up tao_yytext. */ \ -+ *tao_yy_cp = tao_yy_hold_char; \ -+ TAO_YY_RESTORE_TAO_YY_MORE_OFFSET \ -+ tao_yy_c_buf_p = tao_yy_cp = tao_yy_bp + n - TAO_YY_MORE_ADJ; \ -+ TAO_YY_DO_BEFORE_ACTION; /* set up tao_yytext again */ \ -+ } \ -+ while ( 0 ) - --#define unput(c) yyunput( c, (yytext_ptr) ) -+#define unput(c) tao_yyunput( c, tao_yytext_ptr ) - - /* The following is because we cannot portably get our hands on size_t - * (without autoconf's help, which isn't available because we want - * flex-generated scanners to compile on their own). - */ -+typedef unsigned int tao_yy_size_t; - --#ifndef YY_TYPEDEF_YY_SIZE_T --#define YY_TYPEDEF_YY_SIZE_T --typedef unsigned int yy_size_t; --#endif -- --#ifndef YY_STRUCT_YY_BUFFER_STATE --#define YY_STRUCT_YY_BUFFER_STATE --struct yy_buffer_state -- { -- FILE *yy_input_file; -- -- char *yy_ch_buf; /* input buffer */ -- char *yy_buf_pos; /* current position in input buffer */ -- -- /* Size of input buffer in bytes, not including room for EOB -- * characters. -- */ -- yy_size_t yy_buf_size; -- -- /* Number of characters read into yy_ch_buf, not including EOB -- * characters. -- */ -- int yy_n_chars; -- -- /* Whether we "own" the buffer - i.e., we know we created it, -- * and can realloc() it to grow it, and should free() it to -- * delete it. -- */ -- int yy_is_our_buffer; -- -- /* Whether this is an "interactive" input source; if so, and -- * if we're using stdio for input, then we want to use getc() -- * instead of fread(), to make sure we stop fetching input after -- * each newline. -- */ -- int yy_is_interactive; -- -- /* Whether we're considered to be at the beginning of a line. -- * If so, '^' rules will be active on the next match, otherwise -- * not. -- */ -- int yy_at_bol; -- -- int yy_bs_lineno; /**< The line count. */ -- int yy_bs_column; /**< The column count. */ -- -- /* Whether to try to fill the input buffer when we reach the -- * end of it. -- */ -- int yy_fill_buffer; -- -- int yy_buffer_status; -- --#define YY_BUFFER_NEW 0 --#define YY_BUFFER_NORMAL 1 -- /* When an EOF's been seen but there's still some text to process -- * then we mark the buffer as YY_EOF_PENDING, to indicate that we -- * shouldn't try reading from the input source any more. We might -- * still have a bunch of tokens to match, though, because of -- * possible backing-up. -- * -- * When we actually see the EOF, we change the status to "new" -- * (via yyrestart()), so that the user can continue scanning by -- * just pointing yyin at a new input file. -- */ --#define YY_BUFFER_EOF_PENDING 2 -- -- }; --#endif /* !YY_STRUCT_YY_BUFFER_STATE */ -- --/* Stack of input buffers. */ --static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ --static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ --static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ - --/* We provide macros for accessing buffer states in case in the -- * future we want to put the buffer states in a more general -- * "scanner state". -- * -- * Returns the top of the stack, or NULL. -- */ --#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ -- ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ -- : NULL) -+struct tao_yy_buffer_state -+ { -+ FILE *tao_yy_input_file; - --/* Same as previous macro, but useful when we know that the buffer stack is not -- * NULL or when we need an lvalue. For internal use only. -- */ --#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] -+ char *tao_yy_ch_buf; /* input buffer */ -+ char *tao_yy_buf_pos; /* current position in input buffer */ - --/* yy_hold_char holds the character lost when yytext is formed. */ --static char yy_hold_char; --static int yy_n_chars; /* number of characters read into yy_ch_buf */ --int yyleng; -+ /* Size of input buffer in bytes, not including room for EOB -+ * characters. -+ */ -+ tao_yy_size_t tao_yy_buf_size; - --/* Points to current character in buffer. */ --static char *yy_c_buf_p = (char *) 0; --static int yy_init = 1; /* whether we need to initialize */ --static int yy_start = 0; /* start state number */ -+ /* Number of characters read into tao_yy_ch_buf, not including EOB -+ * characters. -+ */ -+ int tao_yy_n_chars; -+ -+ /* Whether we "own" the buffer - i.e., we know we created it, -+ * and can realloc() it to grow it, and should free() it to -+ * delete it. -+ */ -+ int tao_yy_is_our_buffer; -+ -+ /* Whether this is an "interactive" input source; if so, and -+ * if we're using stdio for input, then we want to use getc() -+ * instead of fread(), to make sure we stop fetching input after -+ * each newline. -+ */ -+ int tao_yy_is_interactive; -+ -+ /* Whether we're considered to be at the beginning of a line. -+ * If so, '^' rules will be active on the next match, otherwise -+ * not. -+ */ -+ int tao_yy_at_bol; -+ -+ /* Whether to try to fill the input buffer when we reach the -+ * end of it. -+ */ -+ int tao_yy_fill_buffer; -+ -+ int tao_yy_buffer_status; -+#define TAO_YY_BUFFER_NEW 0 -+#define TAO_YY_BUFFER_NORMAL 1 -+ /* When an EOF's been seen but there's still some text to process -+ * then we mark the buffer as TAO_YY_EOF_PENDING, to indicate that we -+ * shouldn't try reading from the input source any more. We might -+ * still have a bunch of tokens to match, though, because of -+ * possible backing-up. -+ * -+ * When we actually see the EOF, we change the status to "new" -+ * (via tao_yyrestart()), so that the user can continue scanning by -+ * just pointing tao_yyin at a new input file. -+ */ -+#define TAO_YY_BUFFER_EOF_PENDING 2 -+ }; - --/* Flag which is used to allow yywrap()'s to do buffer switches -- * instead of setting up a fresh yyin. A bit of a hack ... -+static TAO_YY_BUFFER_STATE tao_yy_current_buffer = 0; -+ -+/* We provide macros for accessing buffer states in case in the -+ * future we want to put the buffer states in a more general -+ * "scanner state". - */ --static int yy_did_buffer_switch_on_eof; -+#define TAO_YY_CURRENT_BUFFER tao_yy_current_buffer - --void yyrestart (FILE *input_file ); --void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); --YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); --void yy_delete_buffer (YY_BUFFER_STATE b ); --void yy_flush_buffer (YY_BUFFER_STATE b ); --void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); --void yypop_buffer_state (void ); - --static void yyensure_buffer_stack (void ); --static void yy_load_buffer_state (void ); --static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); -+/* tao_yy_hold_char holds the character lost when tao_yytext is formed. */ -+static char tao_yy_hold_char; - --#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) -+static int tao_yy_n_chars; /* number of characters read into tao_yy_ch_buf */ - --YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); --YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); --YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); - --void *yyalloc (yy_size_t ); --void *yyrealloc (void *,yy_size_t ); --void yyfree (void * ); -+int tao_yyleng; - --#define yy_new_buffer yy_create_buffer -+/* Points to current character in buffer. */ -+static char *tao_yy_c_buf_p = (char *) 0; -+static int tao_yy_init = 1; /* whether we need to initialize */ -+static int tao_yy_start = 0; /* start state number */ - --#define yy_set_interactive(is_interactive) \ -- { \ -- if ( ! YY_CURRENT_BUFFER ){ \ -- yyensure_buffer_stack (); \ -- YY_CURRENT_BUFFER_LVALUE = \ -- yy_create_buffer(yyin,YY_BUF_SIZE ); \ -- } \ -- YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ -- } -+/* Flag which is used to allow tao_yywrap()'s to do buffer switches -+ * instead of setting up a fresh tao_yyin. A bit of a hack ... -+ */ -+static int tao_yy_did_buffer_switch_on_eof; - --#define yy_set_bol(at_bol) \ -- { \ -- if ( ! YY_CURRENT_BUFFER ){\ -- yyensure_buffer_stack (); \ -- YY_CURRENT_BUFFER_LVALUE = \ -- yy_create_buffer(yyin,YY_BUF_SIZE ); \ -- } \ -- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ -- } -+void tao_yyrestart TAO_YY_PROTO(( FILE *input_file )); - --#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) -+void tao_yy_switch_to_buffer TAO_YY_PROTO(( TAO_YY_BUFFER_STATE new_buffer )); -+void tao_yy_load_buffer_state TAO_YY_PROTO(( void )); -+TAO_YY_BUFFER_STATE tao_yy_create_buffer TAO_YY_PROTO(( FILE *file, int size )); -+void tao_yy_delete_buffer TAO_YY_PROTO(( TAO_YY_BUFFER_STATE b )); -+void tao_yy_init_buffer TAO_YY_PROTO(( TAO_YY_BUFFER_STATE b, FILE *file )); -+void tao_yy_flush_buffer TAO_YY_PROTO(( TAO_YY_BUFFER_STATE b )); -+#define TAO_YY_FLUSH_BUFFER tao_yy_flush_buffer( tao_yy_current_buffer ) - --/* Begin user sect3 */ -+TAO_YY_BUFFER_STATE tao_yy_scan_buffer TAO_YY_PROTO(( char *base, tao_yy_size_t size )); -+TAO_YY_BUFFER_STATE tao_yy_scan_string TAO_YY_PROTO(( tao_yyconst char *tao_yy_str )); -+TAO_YY_BUFFER_STATE tao_yy_scan_bytes TAO_YY_PROTO(( tao_yyconst char *bytes, int len )); - --typedef unsigned char YY_CHAR; -+static void *tao_yy_flex_alloc TAO_YY_PROTO(( tao_yy_size_t )); -+static void *tao_yy_flex_realloc TAO_YY_PROTO(( void *, tao_yy_size_t )); -+static void tao_yy_flex_free TAO_YY_PROTO(( void * )); - --FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; -+#define tao_yy_new_buffer tao_yy_create_buffer - --typedef int yy_state_type; -+#define tao_yy_set_interactive(is_interactive) \ -+ { \ -+ if ( ! tao_yy_current_buffer ) \ -+ tao_yy_current_buffer = tao_yy_create_buffer( tao_yyin, TAO_YY_BUF_SIZE ); \ -+ tao_yy_current_buffer->tao_yy_is_interactive = is_interactive; \ -+ } - --extern int yylineno; -+#define tao_yy_set_bol(at_bol) \ -+ { \ -+ if ( ! tao_yy_current_buffer ) \ -+ tao_yy_current_buffer = tao_yy_create_buffer( tao_yyin, TAO_YY_BUF_SIZE ); \ -+ tao_yy_current_buffer->tao_yy_at_bol = at_bol; \ -+ } -+ -+#define TAO_YY_AT_BOL() (tao_yy_current_buffer->tao_yy_at_bol) - --int yylineno = 1; -+typedef unsigned char TAO_YY_CHAR; -+FILE *tao_yyin = (FILE *) 0, *tao_yyout = (FILE *) 0; -+typedef int tao_yy_state_type; -+extern char tao_yytext[]; - --extern char yytext[]; - --static yy_state_type yy_get_previous_state (void ); --static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); --static int yy_get_next_buffer (void ); --static void yy_fatal_error (yyconst char msg[] ); -+static tao_yy_state_type tao_yy_get_previous_state TAO_YY_PROTO(( void )); -+static tao_yy_state_type tao_yy_try_NUL_trans TAO_YY_PROTO(( tao_yy_state_type current_state )); -+static int tao_yy_get_next_buffer TAO_YY_PROTO(( void )); -+static void tao_yy_fatal_error TAO_YY_PROTO(( tao_yyconst char msg[] )); - - /* Done after the current pattern has been matched and before the -- * corresponding action - sets up yytext. -+ * corresponding action - sets up tao_yytext. - */ --#define YY_DO_BEFORE_ACTION \ -- (yytext_ptr) = yy_bp; \ -- yyleng = (size_t) (yy_cp - yy_bp); \ -- (yy_hold_char) = *yy_cp; \ -- *yy_cp = '\0'; \ -- if ( yyleng >= YYLMAX ) \ -- YY_FATAL_ERROR( "token too large, exceeds YYLMAX" ); \ -- yy_flex_strncpy( yytext, (yytext_ptr), yyleng + 1 ); \ -- (yy_c_buf_p) = yy_cp; -- --#define YY_NUM_RULES 104 --#define YY_END_OF_BUFFER 105 --/* This struct is not used in this scanner, -- but its presence is necessary. */ --struct yy_trans_info -- { -- flex_int32_t yy_verify; -- flex_int32_t yy_nxt; -- }; --static yyconst flex_int16_t yy_accept[551] = -+#define TAO_YY_DO_BEFORE_ACTION \ -+ tao_yytext_ptr = tao_yy_bp; \ -+ tao_yyleng = (int) (tao_yy_cp - tao_yy_bp); \ -+ tao_yy_hold_char = *tao_yy_cp; \ -+ *tao_yy_cp = '\0'; \ -+ if ( tao_yyleng >= TAO_YYLMAX ) \ -+ TAO_YY_FATAL_ERROR( "token too large, exceeds TAO_YYLMAX" ); \ -+ tao_yy_flex_strncpy( tao_yytext, tao_yytext_ptr, tao_yyleng + 1 ); \ -+ tao_yy_c_buf_p = tao_yy_cp; -+ -+#define TAO_YY_NUM_RULES 104 -+#define TAO_YY_END_OF_BUFFER 105 -+static tao_yyconst short int tao_yy_accept[551] = - { 0, - 101, 101, 105, 103, 101, 102, 102, 103, 103, 103, - 103, 103, 76, 72, 103, 103, 103, 68, 68, 68, -@@ -427,7 +348,7 @@ - 98, 0, 0, 0, 40, 94, 0, 86, 86, 0 - } ; - --static yyconst flex_int32_t yy_ec[256] = -+static tao_yyconst int tao_yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, -@@ -459,7 +380,7 @@ - 1, 1, 1, 1, 1 - } ; - --static yyconst flex_int32_t yy_meta[60] = -+static tao_yyconst int tao_yy_meta[60] = - { 0, - 1, 1, 2, 1, 1, 3, 1, 4, 1, 1, - 1, 1, 1, 5, 5, 5, 1, 1, 1, 1, -@@ -469,7 +390,7 @@ - 6, 8, 6, 8, 6, 8, 6, 8, 6 - } ; - --static yyconst flex_int16_t yy_base[578] = -+static tao_yyconst short int tao_yy_base[578] = - { 0, - 0, 58, 1044, 1045, 59, 1045, 1045, 56, 1009, 54, - 57, 65, 68, 73, 1025, 1023, 1020, 0, 1017, 69, -@@ -536,7 +457,7 @@ - 739, 747, 755, 763, 771, 779, 787 - } ; - --static yyconst flex_int16_t yy_def[578] = -+static tao_yyconst short int tao_yy_def[578] = - { 0, - 550, 1, 550, 550, 550, 550, 550, 551, 552, 550, - 550, 550, 550, 550, 550, 550, 550, 553, 553, 553, -@@ -603,7 +524,7 @@ - 550, 550, 550, 550, 550, 550, 550 - } ; - --static yyconst flex_int16_t yy_nxt[1105] = -+static tao_yyconst short int tao_yy_nxt[1105] = - { 0, - 4, 5, 6, 7, 5, 8, 4, 9, 4, 4, - 10, 11, 12, 13, 14, 14, 15, 16, 4, 17, -@@ -727,9 +648,10 @@ - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - - 550, 550, 550, 550 -+ - } ; - --static yyconst flex_int16_t yy_chk[1105] = -+static tao_yyconst short int tao_yy_chk[1105] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -@@ -853,28 +775,27 @@ - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - - 550, 550, 550, 550 -- } ; - --static yy_state_type yy_last_accepting_state; --static char *yy_last_accepting_cpos; -+ } ; - --extern int yy_flex_debug; --int yy_flex_debug = 0; -+static tao_yy_state_type tao_yy_last_accepting_state; -+static char *tao_yy_last_accepting_cpos; - - /* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ - #define REJECT reject_used_but_not_detected --#define yymore() yymore_used_but_not_detected --#define YY_MORE_ADJ 0 --#define YY_RESTORE_YY_MORE_OFFSET --#ifndef YYLMAX --#define YYLMAX 8192 -+#define tao_yymore() tao_yymore_used_but_not_detected -+#define TAO_YY_MORE_ADJ 0 -+#define TAO_YY_RESTORE_TAO_YY_MORE_OFFSET -+#ifndef TAO_YYLMAX -+#define TAO_YYLMAX 8192 - #endif - --char yytext[YYLMAX]; --char *yytext_ptr; --/* $Id$ -+char tao_yytext[TAO_YYLMAX]; -+char *tao_yytext_ptr; -+#define INITIAL 0 -+/* $Id$ - - COPYRIGHT - -@@ -953,6 +874,7 @@ - #include "ast_expression.h" - #include "ast_argument.h" - #include "ast_operation.h" -+#include "ast_root.h" - #include "fe_interface_header.h" - #include "global_extern.h" - #include "fe_private.h" -@@ -964,533 +886,541 @@ - static char idl_escape_reader (char *); - static double idl_atof (char *); - static long idl_atoi (char *, long); --static ACE_UINT64 idl_atoui (char *, long); --static void idl_parse_line_and_file (char *); --static void idl_store_pragma (char *); -+static ACE_UINT64 idl_atoui (char *, long); -+static void idl_parse_line_and_file (char *); -+static void idl_store_pragma (char *); - static char * idl_get_pragma_string (char *); - static idl_bool idl_valid_version (char *); - static AST_Decl * idl_find_node (char *); - - #if 0 /* defined (HPUX) */ --// HPUX has yytext typed to unsigned char *. We make sure here that --// we'll always use char * static char* __yytext = (char*) yytext; --// NOTE: This will not work under flex(1) were yytext is not a fixed -+// HPUX has tao_yytext typed to unsigned char *. We make sure here that -+// we'll always use char * static char* __tao_yytext = (char*) tao_yytext; -+// NOTE: This will not work under flex(1) were tao_yytext is not a fixed - // buffer, but a dynamically allocated one. This function should do - // the trick for us. --inline char *__yytext() -+inline char *__tao_yytext() - { -- return (char *) yytext; -+ return (char *) tao_yytext; - } --#define ace_yytext __yytext() -+#define ace_tao_yytext __tao_yytext() - #else --#define ace_yytext yytext -+#define ace_tao_yytext tao_yytext - #endif /* 0 */ - - /* SO we don't choke on files that use \r\n */ -- --#define INITIAL 0 -- --#ifndef YY_NO_UNISTD_H --/* Special case for "unistd.h", since it is non-ANSI. We include it way -- * down here because we want the user's section 1 to have been scanned first. -- * The user has a chance to override it with an option. -- */ --#include <unistd.h> --#endif -- --#ifndef YY_EXTRA_TYPE --#define YY_EXTRA_TYPE void * --#endif -+#define TAO_YY_NEVER_INTERACTIVE 1 - - /* Macros after this point can all be overridden by user definitions in - * section 1. - */ - --#ifndef YY_SKIP_YYWRAP -+#ifndef TAO_YY_SKIP_TAO_YYWRAP - #ifdef __cplusplus --extern "C" int yywrap (void ); -+extern "C" int tao_yywrap TAO_YY_PROTO(( void )); - #else --extern int yywrap (void ); -+extern int tao_yywrap TAO_YY_PROTO(( void )); - #endif - #endif - -- static void yyunput (int c,char *buf_ptr ); -- --#ifndef yytext_ptr --static void yy_flex_strncpy (char *,yyconst char *,int ); -+#ifndef TAO_YY_NO_UNPUT -+static void tao_yyunput TAO_YY_PROTO(( int c, char *buf_ptr )); - #endif ++#ifdef __STDC__ --#ifdef YY_NEED_STRLEN --static int yy_flex_strlen (yyconst char * ); -+#ifndef tao_yytext_ptr -+static void tao_yy_flex_strncpy TAO_YY_PROTO(( char *, tao_yyconst char *, int )); - #endif - --#ifndef YY_NO_INPUT -+#ifdef TAO_YY_NEED_STRLEN -+static int tao_yy_flex_strlen TAO_YY_PROTO(( tao_yyconst char * )); -+#endif - -+#ifndef TAO_YY_NO_INPUT - #ifdef __cplusplus --static int yyinput (void ); -+static int tao_yyinput TAO_YY_PROTO(( void )); - #else --static int input (void ); -+static int input TAO_YY_PROTO(( void )); -+#endif + #define TAO_YY_USE_PROTOS +@@ -968,5 +965,5 @@ #endif +-#if TAO_YY_STACK_USED +#ifdef TAO_YY_STACK_USED -+static int tao_yy_start_stack_ptr = 0; -+static int tao_yy_start_stack_depth = 0; -+static int *tao_yy_start_stack = 0; -+#ifndef TAO_YY_NO_PUSH_STATE -+static void tao_yy_push_state TAO_YY_PROTO(( int new_state )); -+#endif -+#ifndef TAO_YY_NO_POP_STATE -+static void tao_yy_pop_state TAO_YY_PROTO(( void )); -+#endif -+#ifndef TAO_YY_NO_TOP_STATE -+static int tao_yy_top_state TAO_YY_PROTO(( void )); -+#endif -+ -+#else -+#define TAO_YY_NO_PUSH_STATE 1 -+#define TAO_YY_NO_POP_STATE 1 -+#define TAO_YY_NO_TOP_STATE 1 -+#endif -+ -+#ifdef TAO_YY_MALLOC_DECL -+TAO_YY_MALLOC_DECL -+#else + static int tao_yy_start_stack_ptr = 0; + static int tao_yy_start_stack_depth = 0; +@@ -991,5 +988,5 @@ + TAO_YY_MALLOC_DECL + #else +-#if __STDC__ +#ifdef __STDC__ -+#ifndef __cplusplus -+#endif -+#else -+/* Just try to get by without declaring the routines. This will fail -+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) -+ * or sizeof(void*) != sizeof(int). -+ */ -+#endif - #endif - - /* Amount of stuff to slurp up with each read. */ --#ifndef YY_READ_BUF_SIZE --#define YY_READ_BUF_SIZE 8192 -+#ifndef TAO_YY_READ_BUF_SIZE -+#define TAO_YY_READ_BUF_SIZE 8192 - #endif - - /* Copy whatever the last rule matched to the standard output. */ --#ifndef ECHO -+ -+#ifndef TAO_YY_ECHO - /* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ --#define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) -+#define TAO_YY_ECHO (void) fwrite( tao_yytext, tao_yyleng, 1, tao_yyout ) - #endif - --/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, -+/* Gets input and stuffs it into "buf". number of characters read, or TAO_YY_NULL, - * is returned in "result". - */ --#ifndef YY_INPUT --#define YY_INPUT(buf,result,max_size) \ -- if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ -- { \ -- int c = '*'; \ -- size_t n; \ -- for ( n = 0; n < max_size && \ -- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ -- buf[n] = (char) c; \ -- if ( c == '\n' ) \ -- buf[n++] = (char) c; \ -- if ( c == EOF && ferror( yyin ) ) \ -- YY_FATAL_ERROR( "input in flex scanner failed" ); \ -- result = n; \ -- } \ -- else \ -- { \ -- errno=0; \ -- while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ -- { \ -- if( errno != EINTR) \ -- { \ -- YY_FATAL_ERROR( "input in flex scanner failed" ); \ -- break; \ -- } \ -- errno=0; \ -- clearerr(yyin); \ -- } \ -- }\ --\ -- -+#ifndef TAO_YY_INPUT -+#define TAO_YY_INPUT(buf,result,max_size) \ -+ if ( tao_yy_current_buffer->tao_yy_is_interactive ) \ -+ { \ -+ int c = '*', n; \ -+ for ( n = 0; n < max_size && \ -+ (c = getc( tao_yyin )) != EOF && c != '\n'; ++n ) \ -+ buf[n] = (char) c; \ -+ if ( c == '\n' ) \ -+ buf[n++] = (char) c; \ -+ if ( c == EOF && ferror( tao_yyin ) ) \ -+ TAO_YY_FATAL_ERROR( "input in flex scanner failed" ); \ -+ result = n; \ -+ } \ -+ else if ( ((result = static_cast<int> ( \ -+ fread( buf, 1, max_size, tao_yyin ))) == 0) \ -+ && ferror( tao_yyin ) ) \ -+ TAO_YY_FATAL_ERROR( "input in flex scanner failed" ); - #endif - --/* No semi-colon after return; correct usage is to write "yyterminate();" - -+/* No semi-colon after return; correct usage is to write "tao_yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ --#ifndef yyterminate --#define yyterminate() return YY_NULL -+#ifndef tao_yyterminate -+#define tao_yyterminate() return TAO_YY_NULL - #endif - - /* Number of entries by which start-condition stack grows. */ --#ifndef YY_START_STACK_INCR --#define YY_START_STACK_INCR 25 -+#ifndef TAO_YY_START_STACK_INCR -+#define TAO_YY_START_STACK_INCR 25 - #endif - - /* Report a fatal error. */ --#ifndef YY_FATAL_ERROR --#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -+#ifndef TAO_YY_FATAL_ERROR -+#define TAO_YY_FATAL_ERROR(msg) tao_yy_fatal_error( msg ) - #endif - --/* end tables serialization structures and prototypes */ -- - /* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ --#ifndef YY_DECL --#define YY_DECL_IS_OURS 1 -- --extern int yylex (void); -- --#define YY_DECL int yylex (void) --#endif /* !YY_DECL */ -+#ifndef TAO_YY_DECL -+#define TAO_YY_DECL int tao_yylex TAO_YY_PROTO(( void )) -+#endif - --/* Code executed at the beginning of each rule, after yytext and yyleng -+/* Code executed at the beginning of each rule, after tao_yytext and tao_yyleng - * have been set up. - */ --#ifndef YY_USER_ACTION --#define YY_USER_ACTION -+#ifndef TAO_YY_USER_ACTION -+#define TAO_YY_USER_ACTION + #ifndef __cplusplus #endif - +@@ -1072,5 +1069,5 @@ /* Code executed at the end of each rule. */ --#ifndef YY_BREAK --#define YY_BREAK break; -+#ifndef TAO_YY_BREAK + #ifndef TAO_YY_BREAK +-#define TAO_YY_BREAK break; +#define TAO_YY_BREAK ACE_NOTREACHED (break;) -+#endif -+ -+#define TAO_YY_RULE_SETUP \ -+ if ( tao_yyleng > 0 ) \ -+ tao_yy_current_buffer->tao_yy_at_bol = \ -+ (tao_yytext[tao_yyleng - 1] == '\n'); \ -+ TAO_YY_USER_ACTION -+ -+TAO_YY_DECL -+ { -+ register tao_yy_state_type tao_yy_current_state; -+ register char *tao_yy_cp = 0, *tao_yy_bp = 0; -+ register int tao_yy_act; -+ -+ -+ -+ -+ if ( tao_yy_init ) -+ { -+ tao_yy_init = 0; -+ -+#ifdef TAO_YY_USER_INIT -+ TAO_YY_USER_INIT; #endif --#define YY_RULE_SETUP \ -- if ( yyleng > 0 ) \ -- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ -- (yytext[yyleng - 1] == '\n'); \ -- YY_USER_ACTION -- --/** The main scanner function which does all the work. -- */ --YY_DECL --{ -- register yy_state_type yy_current_state; -- register char *yy_cp, *yy_bp; -- register int yy_act; -- -- if ( (yy_init) ) -- { -- (yy_init) = 0; -- --#ifdef YY_USER_INIT -- YY_USER_INIT; --#endif -- -- if ( ! (yy_start) ) -- (yy_start) = 1; /* first start state */ -- -- if ( ! yyin ) -- yyin = stdin; -- -- if ( ! yyout ) -- yyout = stdout; -- -- if ( ! YY_CURRENT_BUFFER ) { -- yyensure_buffer_stack (); -- YY_CURRENT_BUFFER_LVALUE = -- yy_create_buffer(yyin,YY_BUF_SIZE ); -- } -- -- yy_load_buffer_state( ); -- } -- -- while ( 1 ) /* loops until end-of-file is reached */ -- { -- yy_cp = (yy_c_buf_p); -- -- /* Support of yytext. */ -- *yy_cp = (yy_hold_char); -- -- /* yy_bp points to the position in yy_ch_buf of the start of -- * the current run. -- */ -- yy_bp = yy_cp; -- -- yy_current_state = (yy_start); -- yy_current_state += YY_AT_BOL(); --yy_match: -- do -- { -- register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; -- if ( yy_accept[yy_current_state] ) -- { -- (yy_last_accepting_state) = yy_current_state; -- (yy_last_accepting_cpos) = yy_cp; -- } -- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) -- { -- yy_current_state = (int) yy_def[yy_current_state]; -- if ( yy_current_state >= 551 ) -- yy_c = yy_meta[(unsigned int) yy_c]; -- } -- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; -- ++yy_cp; -- } -- while ( yy_current_state != 550 ); -- yy_cp = (yy_last_accepting_cpos); -- yy_current_state = (yy_last_accepting_state); -- --yy_find_action: -- yy_act = yy_accept[yy_current_state]; -- -- YY_DO_BEFORE_ACTION; -- --do_action: /* This label is used only to access EOF actions. */ -- -- switch ( yy_act ) -- { /* beginning of action switch */ -- case 0: /* must back up */ -- /* undo the effects of YY_DO_BEFORE_ACTION */ -- *yy_cp = (yy_hold_char); -- yy_cp = (yy_last_accepting_cpos); -- yy_current_state = (yy_last_accepting_state); -- goto yy_find_action; -+ if ( ! tao_yy_start ) -+ tao_yy_start = 1; /* first start state */ -+ -+ if ( ! tao_yyin ) -+ tao_yyin = stdin; -+ -+ if ( ! tao_yyout ) -+ tao_yyout = stdout; -+ -+ if ( ! tao_yy_current_buffer ) -+ tao_yy_current_buffer = -+ tao_yy_create_buffer( tao_yyin, TAO_YY_BUF_SIZE ); -+ -+ tao_yy_load_buffer_state(); -+ } -+ -+ while ( 1 ) /* loops until end-of-file is reached */ -+ { -+ tao_yy_cp = tao_yy_c_buf_p; -+ -+ /* Support of tao_yytext. */ -+ *tao_yy_cp = tao_yy_hold_char; -+ -+ /* tao_yy_bp points to the position in tao_yy_ch_buf of the start of -+ * the current run. -+ */ -+ tao_yy_bp = tao_yy_cp; -+ -+ tao_yy_current_state = tao_yy_start; -+ tao_yy_current_state += TAO_YY_AT_BOL(); -+tao_yy_match: -+ do -+ { -+ register TAO_YY_CHAR tao_yy_c = tao_yy_ec[TAO_YY_SC_TO_UI(*tao_yy_cp)]; -+ if ( tao_yy_accept[tao_yy_current_state] ) -+ { -+ tao_yy_last_accepting_state = tao_yy_current_state; -+ tao_yy_last_accepting_cpos = tao_yy_cp; -+ } -+ while ( tao_yy_chk[tao_yy_base[tao_yy_current_state] + tao_yy_c] != tao_yy_current_state ) -+ { -+ tao_yy_current_state = (int) tao_yy_def[tao_yy_current_state]; -+ if ( tao_yy_current_state >= 551 ) -+ tao_yy_c = tao_yy_meta[(unsigned int) tao_yy_c]; -+ } -+ tao_yy_current_state = tao_yy_nxt[tao_yy_base[tao_yy_current_state] + (unsigned int) tao_yy_c]; -+ ++tao_yy_cp; -+ } -+ while ( tao_yy_current_state != 550 ); -+ -+tao_yy_find_action: -+ tao_yy_act = tao_yy_accept[tao_yy_current_state]; -+ if ( tao_yy_act == 0 ) -+ { /* have to back up */ -+ tao_yy_cp = tao_yy_last_accepting_cpos; -+ tao_yy_current_state = tao_yy_last_accepting_state; -+ tao_yy_act = tao_yy_accept[tao_yy_current_state]; -+ } -+ -+ TAO_YY_DO_BEFORE_ACTION; -+ -+ -+do_action: /* This label is used only to access EOF actions. */ -+ -+ -+ switch ( tao_yy_act ) -+ { /* beginning of action switch */ -+ case 0: /* must back up */ -+ /* undo the effects of TAO_YY_DO_BEFORE_ACTION */ -+ *tao_yy_cp = tao_yy_hold_char; -+ tao_yy_cp = tao_yy_last_accepting_cpos; -+ tao_yy_current_state = tao_yy_last_accepting_state; -+ goto tao_yy_find_action; - - case 1: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_ANY; -- YY_BREAK -+ TAO_YY_BREAK - case 2: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_OBJECT; -- YY_BREAK -+ TAO_YY_BREAK - case 3: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_MODULE; -- YY_BREAK -+ TAO_YY_BREAK - case 4: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_RAISES; -- YY_BREAK -+ TAO_YY_BREAK - case 5: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_READONLY; -- YY_BREAK -+ TAO_YY_BREAK - case 6: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_ATTRIBUTE; -- YY_BREAK -+ TAO_YY_BREAK - case 7: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_EXCEPTION; -- YY_BREAK -+ TAO_YY_BREAK - case 8: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_CONTEXT; -- YY_BREAK -+ TAO_YY_BREAK - case 9: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_INTERFACE; -- YY_BREAK -+ TAO_YY_BREAK - case 10: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_CONST; -- YY_BREAK -+ TAO_YY_BREAK - case 11: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_TYPEDEF; -- YY_BREAK -+ TAO_YY_BREAK - case 12: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_STRUCT; -- YY_BREAK -+ TAO_YY_BREAK - case 13: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_ENUM; -- YY_BREAK -+ TAO_YY_BREAK - case 14: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_STRING; -- YY_BREAK -+ TAO_YY_BREAK - case 15: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_WSTRING; -- YY_BREAK -+ TAO_YY_BREAK - case 16: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_SEQUENCE; -- YY_BREAK -+ TAO_YY_BREAK - case 17: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_UNION; -- YY_BREAK -+ TAO_YY_BREAK - case 18: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_FIXED; -- YY_BREAK -+ TAO_YY_BREAK - case 19: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_SWITCH; -- YY_BREAK -+ TAO_YY_BREAK - case 20: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_CASE; -- YY_BREAK -+ TAO_YY_BREAK - case 21: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_DEFAULT; -- YY_BREAK -+ TAO_YY_BREAK - case 22: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_FLOAT; -- YY_BREAK -+ TAO_YY_BREAK - case 23: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_DOUBLE; -- YY_BREAK -+ TAO_YY_BREAK - case 24: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_LONG; -- YY_BREAK -+ TAO_YY_BREAK - case 25: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_SHORT; -- YY_BREAK -+ TAO_YY_BREAK - case 26: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_UNSIGNED; -- YY_BREAK -+ TAO_YY_BREAK - case 27: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_CHAR; -- YY_BREAK -+ TAO_YY_BREAK - case 28: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_WCHAR; -- YY_BREAK -+ TAO_YY_BREAK - case 29: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_BOOLEAN; -- YY_BREAK -+ TAO_YY_BREAK - case 30: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_OCTET; -- YY_BREAK -+ TAO_YY_BREAK - case 31: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_VOID; -- YY_BREAK -+ TAO_YY_BREAK - case 32: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_NATIVE; -- YY_BREAK -+ TAO_YY_BREAK - case 33: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_LOCAL; -- YY_BREAK -+ TAO_YY_BREAK - case 34: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_ABSTRACT; -- YY_BREAK -+ TAO_YY_BREAK - case 35: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_CUSTOM; -- YY_BREAK -+ TAO_YY_BREAK - case 36: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_FACTORY; -- YY_BREAK -+ TAO_YY_BREAK - case 37: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_PRIVATE; -- YY_BREAK -+ TAO_YY_BREAK - case 38: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_PUBLIC; -- YY_BREAK -+ TAO_YY_BREAK - case 39: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_SUPPORTS; -- YY_BREAK -+ TAO_YY_BREAK - case 40: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_TRUNCATABLE; -- YY_BREAK -+ TAO_YY_BREAK - case 41: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_VALUETYPE; -- YY_BREAK -+ TAO_YY_BREAK - case 42: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_COMPONENT; -- YY_BREAK -+ TAO_YY_BREAK - case 43: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_CONSUMES; -- YY_BREAK -+ TAO_YY_BREAK - case 44: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_EMITS; -- YY_BREAK -+ TAO_YY_BREAK - case 45: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_EVENTTYPE; -- YY_BREAK -+ TAO_YY_BREAK - case 46: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_FINDER; -- YY_BREAK -+ TAO_YY_BREAK - case 47: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_GETRAISES; -- YY_BREAK -+ TAO_YY_BREAK - case 48: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_HOME; -- YY_BREAK -+ TAO_YY_BREAK - case 49: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_IMPORT; -- YY_BREAK -+ TAO_YY_BREAK - case 50: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_MULTIPLE; -- YY_BREAK -+ TAO_YY_BREAK - case 51: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_PRIMARYKEY; -- YY_BREAK -+ TAO_YY_BREAK - case 52: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_PROVIDES; -- YY_BREAK -+ TAO_YY_BREAK - case 53: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_PUBLISHES; -- YY_BREAK -+ TAO_YY_BREAK - case 54: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_SETRAISES; -- YY_BREAK -+ TAO_YY_BREAK - case 55: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_TYPEID; -- YY_BREAK -+ TAO_YY_BREAK - case 56: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_TYPEPREFIX; -- YY_BREAK -+ TAO_YY_BREAK - case 57: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_USES; -- YY_BREAK -+ TAO_YY_BREAK - case 58: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_MANAGES; -- YY_BREAK -+ TAO_YY_BREAK - case 59: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_TRUETOK; -- YY_BREAK -+ TAO_YY_BREAK - case 60: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_FALSETOK; -- YY_BREAK -+ TAO_YY_BREAK - case 61: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_INOUT; -- YY_BREAK -+ TAO_YY_BREAK - case 62: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_IN; -- YY_BREAK -+ TAO_YY_BREAK - case 63: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_OUT; -- YY_BREAK -+ TAO_YY_BREAK - case 64: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_ONEWAY; -- YY_BREAK -+ TAO_YY_BREAK - case 65: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_LEFT_SHIFT; -- YY_BREAK -+ TAO_YY_BREAK - case 66: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - return IDL_RIGHT_SHIFT; -- YY_BREAK -+ TAO_YY_BREAK - case 67: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.strval = (char *) "::"; -- return IDL_SCOPE_DELIMITOR; -- } -- YY_BREAK -+ tao_yylval.strval = (char *) "::"; -+ return IDL_SCOPE_DELIMITOR; -+ } -+ TAO_YY_BREAK - case 68: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { - // Make sure that this identifier is not a C++ keyword. If it is, - // prepend it with a _cxx_. Lookup in the perfect hash table for C++ -@@ -1499,15 +1429,16 @@ - - TAO_IDL_CPP_Keyword_Table cpp_key_tbl; - const TAO_IDL_CPP_Keyword_Entry *entry = 0; -+ - if (!idl_global->preserve_cpp_keywords()) - { - // This check will ensure that escaped C++ keywords will be - // caught and prepended with '_cxx' as non-escaped keywords - // are now prepended with '_cxx_'. -- const char *tmp = -+ const char *tmp = - ace_tao_yytext[0] == '_' ? ace_tao_yytext + 1 : ace_tao_yytext; +@@ -1084,5 +1081,5 @@ + { + register tao_yy_state_type tao_yy_current_state; +- register char *tao_yy_cp, *tao_yy_bp; ++ register char *tao_yy_cp = 0, *tao_yy_bp = 0; + register int tao_yy_act; -- entry = -+ entry = - cpp_key_tbl.lookup (tmp, - static_cast<unsigned int> (ACE_OS::strlen (tmp))); - } -@@ -1523,69 +1454,68 @@ - - return IDENTIFIER; - } -- YY_BREAK -+ TAO_YY_BREAK - case 69: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.dval = idl_atof(ace_yytext); -+ tao_yylval.dval = idl_atof(ace_tao_yytext); - return IDL_FLOATING_PT_LITERAL; - } -- YY_BREAK -+ TAO_YY_BREAK - case 70: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.dval = idl_atof(ace_yytext); -+ tao_yylval.dval = idl_atof(ace_tao_yytext); - return IDL_FLOATING_PT_LITERAL; - } -- YY_BREAK -+ TAO_YY_BREAK - case 71: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.ival = idl_atoi(ace_yytext, 10); -- return IDL_INTEGER_LITERAL; -- } -- YY_BREAK -+ tao_yylval.ival = idl_atoi(ace_tao_yytext, 10); -+ return IDL_INTEGER_LITERAL; -+ } -+ TAO_YY_BREAK - case 72: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.uival = idl_atoui(ace_yytext, 10); -- return IDL_UINTEGER_LITERAL; -- } -- YY_BREAK -+ tao_yylval.uival = idl_atoui(ace_tao_yytext, 10); -+ return IDL_UINTEGER_LITERAL; -+ } -+ TAO_YY_BREAK - case 73: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.ival = idl_atoi(ace_yytext, 16); -- return IDL_INTEGER_LITERAL; -- } -- YY_BREAK -+ tao_yylval.ival = idl_atoi(ace_tao_yytext, 16); -+ return IDL_INTEGER_LITERAL; -+ } -+ TAO_YY_BREAK - case 74: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.uival = idl_atoui(ace_yytext, 16); -- return IDL_UINTEGER_LITERAL; -- } -- YY_BREAK -+ tao_yylval.uival = idl_atoui(ace_tao_yytext, 16); -+ return IDL_UINTEGER_LITERAL; -+ } -+ TAO_YY_BREAK - case 75: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.ival = idl_atoi(ace_yytext, 8); -- return IDL_INTEGER_LITERAL; -- } -- YY_BREAK -+ tao_yylval.ival = idl_atoi(ace_tao_yytext, 8); -+ return IDL_INTEGER_LITERAL; -+ } -+ TAO_YY_BREAK - case 76: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.uival = idl_atoui(ace_yytext, 8); -- return IDL_UINTEGER_LITERAL; -- } -- YY_BREAK -+ tao_yylval.uival = idl_atoui(ace_tao_yytext, 8); -+ return IDL_UINTEGER_LITERAL; -+ } -+ TAO_YY_BREAK - case 77: --/* rule 77 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- /* Skip the quotes */ -- char *tmp = ace_yytext; -+ /* Skip the quotes */ -+ char *tmp = ace_tao_yytext; - for(int i = strlen(tmp) - 1; i >= 0; --i) { - if (isspace(tmp[i])) { - tmp[i] = '\0'; -@@ -1594,1146 +1524,1051 @@ - break; - } - } -- tmp[strlen (tmp) - 1] = '\0'; -- ACE_NEW_RETURN (yylval.sval, -+ tmp[strlen (tmp) - 1] = '\0'; -+ ACE_NEW_RETURN (tao_yylval.sval, - UTL_String (tmp + 1), - IDL_STRING_LITERAL); -- return IDL_STRING_LITERAL; -- } -- YY_BREAK -+ return IDL_STRING_LITERAL; -+ } -+ TAO_YY_BREAK - case 78: --/* rule 78 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- /* Skip the bookends */ -- char *tmp = ACE_OS::strdup (ace_yytext); -- tmp[strlen (tmp) - 1] = '\0'; -- yylval.wsval = idl_wstring_escape_reader(tmp + 2); -- return IDL_WSTRING_LITERAL; -- } -- YY_BREAK -+ /* Skip the bookends */ -+ char *tmp = ACE_OS::strdup (ace_tao_yytext); -+ tmp[strlen (tmp) - 1] = '\0'; -+ tao_yylval.wsval = idl_wstring_escape_reader(tmp + 2); -+ return IDL_WSTRING_LITERAL; -+ } -+ TAO_YY_BREAK - case 79: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.cval = ace_yytext [1]; -- return IDL_CHARACTER_LITERAL; -- } -- YY_BREAK -+ tao_yylval.cval = ace_tao_yytext [1]; -+ return IDL_CHARACTER_LITERAL; -+ } -+ TAO_YY_BREAK - case 80: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- // octal character constant -- yylval.cval = idl_escape_reader(ace_yytext + 1); -- return IDL_CHARACTER_LITERAL; -- } -- YY_BREAK -+ // octal character constant -+ tao_yylval.cval = idl_escape_reader(ace_tao_yytext + 1); -+ return IDL_CHARACTER_LITERAL; -+ } -+ TAO_YY_BREAK - case 81: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- // hexadecimal character constant -- yylval.cval = idl_escape_reader(ace_yytext + 1); -- return IDL_CHARACTER_LITERAL; -- } -- YY_BREAK -+ // hexadecimal character constant -+ tao_yylval.cval = idl_escape_reader(ace_tao_yytext + 1); -+ return IDL_CHARACTER_LITERAL; -+ } -+ TAO_YY_BREAK - case 82: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- yylval.cval = idl_escape_reader(ace_yytext + 1); -- return IDL_CHARACTER_LITERAL; -- } -- YY_BREAK -+ tao_yylval.cval = idl_escape_reader(ace_tao_yytext + 1); -+ return IDL_CHARACTER_LITERAL; -+ } -+ TAO_YY_BREAK - case 83: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- // wide character constant -- yylval.wcval = ace_yytext [2]; -- return IDL_WCHAR_LITERAL; -- } -- YY_BREAK -+ // wide character constant -+ tao_yylval.wcval = ace_tao_yytext [2]; -+ return IDL_WCHAR_LITERAL; -+ } -+ TAO_YY_BREAK - case 84: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- // hexadecimal wide character constant -- yylval.wcval = idl_wchar_escape_reader(ace_yytext + 2); -- return IDL_WCHAR_LITERAL; -- } -- YY_BREAK -+ // hexadecimal wide character constant -+ tao_yylval.wcval = idl_wchar_escape_reader(ace_tao_yytext + 2); -+ return IDL_WCHAR_LITERAL; -+ } -+ TAO_YY_BREAK - case 85: --/* rule 85 can match eol */ - case 86: --/* rule 86 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - {/* remember pragma */ -- idl_global->set_lineno(idl_global->lineno() + 1); -- idl_store_pragma(ace_yytext); -- } -- YY_BREAK -+ idl_global->set_lineno(idl_global->lineno() + 1); -+ idl_store_pragma(ace_tao_yytext); -+ } +@@ -1598,5 +1595,5 @@ + idl_store_pragma(ace_tao_yytext); + } +- TAO_YY_BREAK + break; case 87: --/* rule 87 can match eol */ case 88: --/* rule 88 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - {/* ignore file */ -- idl_global->set_lineno(idl_global->lineno() + 1); -- } -- YY_BREAK -+ idl_global->set_lineno(idl_global->lineno() + 1); -+ } -+ break; +@@ -1605,5 +1602,5 @@ + idl_global->set_lineno(idl_global->lineno() + 1); + } +- TAO_YY_BREAK ++ break; case 89: --/* rule 89 can match eol */ case 90: --/* rule 90 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- idl_parse_line_and_file(ace_yytext); -- } -- YY_BREAK -+ idl_parse_line_and_file(ace_tao_yytext); -+ } -+ break; +@@ -1612,5 +1609,5 @@ + idl_parse_line_and_file(ace_tao_yytext); + } +- TAO_YY_BREAK ++ break; case 91: --/* rule 91 can match eol */ case 92: --/* rule 92 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- idl_parse_line_and_file(ace_yytext); -- } -- YY_BREAK -+ idl_parse_line_and_file(ace_tao_yytext); -+ } -+ break; +@@ -1619,5 +1616,5 @@ + idl_parse_line_and_file(ace_tao_yytext); + } +- TAO_YY_BREAK ++ break; case 93: --/* rule 93 can match eol */ case 94: --/* rule 94 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- idl_parse_line_and_file(ace_yytext); -- } -- YY_BREAK -+ idl_parse_line_and_file(ace_tao_yytext); -+ } -+ break; +@@ -1626,5 +1623,5 @@ + idl_parse_line_and_file(ace_tao_yytext); + } +- TAO_YY_BREAK ++ break; case 95: --/* rule 95 can match eol */ case 96: --/* rule 96 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- idl_parse_line_and_file(ace_yytext); -- } -- YY_BREAK -+ idl_parse_line_and_file(ace_tao_yytext); -+ } -+ break; +@@ -1633,5 +1630,5 @@ + idl_parse_line_and_file(ace_tao_yytext); + } +- TAO_YY_BREAK ++ break; case 97: --/* rule 97 can match eol */ case 98: --/* rule 98 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- /* ignore cpp ident */ -- idl_global->set_lineno(idl_global->lineno() + 1); -- } -- YY_BREAK -+ /* ignore cpp ident */ -+ idl_global->set_lineno(idl_global->lineno() + 1); -+ } -+ break; +@@ -1641,5 +1638,5 @@ + idl_global->set_lineno(idl_global->lineno() + 1); + } +- TAO_YY_BREAK ++ break; case 99: --/* rule 99 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- /* ignore comments */ -- idl_global->set_lineno(idl_global->lineno() + 1); -- } -- YY_BREAK -+ /* ignore comments */ -+ idl_global->set_lineno(idl_global->lineno() + 1); -+ } + TAO_YY_RULE_SETUP +@@ -1648,5 +1645,5 @@ + idl_global->set_lineno(idl_global->lineno() + 1); + } +- TAO_YY_BREAK + break; case 100: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- for(;;) { -- char c = yyinput(); -- if (c == '*') { -- char next = yyinput(); -- if (next == '/') -- break; -- else -- yyunput(c, NULL); -- if (c == '\n') -- idl_global->set_lineno(idl_global->lineno() + 1); -- } -- } -- } -- YY_BREAK -+ for(;;) { -+ char c = tao_yyinput(); -+ if (c == '*') { -+ char next = tao_yyinput(); -+ if (next == '/') -+ break; -+ else -+ tao_yyunput(c, NULL); -+ if (c == '\n') -+ idl_global->set_lineno(idl_global->lineno() + 1); -+ } -+ } -+ } -+ break; + TAO_YY_RULE_SETUP +@@ -1665,9 +1662,9 @@ + } + } +- TAO_YY_BREAK ++ break; case 101: --YY_RULE_SETUP -+TAO_YY_RULE_SETUP + TAO_YY_RULE_SETUP ; -- YY_BREAK -+ break; +- TAO_YY_BREAK ++ break; case 102: --/* rule 102 can match eol */ --YY_RULE_SETUP -+TAO_YY_RULE_SETUP - { -- idl_global->set_lineno(idl_global->lineno() + 1); -- } -- YY_BREAK -+ idl_global->set_lineno(idl_global->lineno() + 1); -+ } -+ break; + TAO_YY_RULE_SETUP +@@ -1675,13 +1672,13 @@ + idl_global->set_lineno(idl_global->lineno() + 1); + } +- TAO_YY_BREAK ++ break; case 103: --YY_RULE_SETUP --return ace_yytext [0]; -- YY_BREAK -+TAO_YY_RULE_SETUP -+return ace_tao_yytext [0]; -+ break; + TAO_YY_RULE_SETUP + return ace_tao_yytext [0]; +- TAO_YY_BREAK ++ break; case 104: --YY_RULE_SETUP --ECHO; -- YY_BREAK --case YY_STATE_EOF(INITIAL): -- yyterminate(); -- -- case YY_END_OF_BUFFER: -- { -- /* Amount of text matched not including the EOB char. */ -- int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; -- -- /* Undo the effects of YY_DO_BEFORE_ACTION. */ -- *yy_cp = (yy_hold_char); -- YY_RESTORE_YY_MORE_OFFSET -- -- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) -- { -- /* We're scanning a new file or input source. It's -- * possible that this happened because the user -- * just pointed yyin at a new source and called -- * yylex(). If so, then we have to assure -- * consistency between YY_CURRENT_BUFFER and our -- * globals. Here is the right place to do so, because -- * this is the first action (other than possibly a -- * back-up) that will match for the new input source. -- */ -- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; -- YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; -- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; -- } -- -- /* Note that here we test for yy_c_buf_p "<=" to the position -- * of the first EOB in the buffer, since yy_c_buf_p will -- * already have been incremented past the NUL character -- * (since all states make transitions on EOB to the -- * end-of-buffer state). Contrast this with the test -- * in input(). -- */ -- if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) -- { /* This was really a NUL. */ -- yy_state_type yy_next_state; -- -- (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; -- -- yy_current_state = yy_get_previous_state( ); -- -- /* Okay, we're now positioned to make the NUL -- * transition. We couldn't have -- * yy_get_previous_state() go ahead and do it -- * for us because it doesn't know how to deal -- * with the possibility of jamming (and we don't -- * want to build jamming into it because then it -- * will run more slowly). -- */ -- -- yy_next_state = yy_try_NUL_trans( yy_current_state ); -- -- yy_bp = (yytext_ptr) + YY_MORE_ADJ; -- -- if ( yy_next_state ) -- { -- /* Consume the NUL. */ -- yy_cp = ++(yy_c_buf_p); -- yy_current_state = yy_next_state; -- goto yy_match; -- } -- -- else -- { -- yy_cp = (yy_last_accepting_cpos); -- yy_current_state = (yy_last_accepting_state); -- goto yy_find_action; -- } -- } -- -- else switch ( yy_get_next_buffer( ) ) -- { -- case EOB_ACT_END_OF_FILE: -- { -- (yy_did_buffer_switch_on_eof) = 0; -- -- if ( yywrap( ) ) -- { -- /* Note: because we've taken care in -- * yy_get_next_buffer() to have set up -- * yytext, we can now set up -- * yy_c_buf_p so that if some total -- * hoser (like flex itself) wants to -- * call the scanner after we return the -- * YY_NULL, it'll still work - another -- * YY_NULL will get returned. -- */ -- (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; -- -- yy_act = YY_STATE_EOF(YY_START); -- goto do_action; -- } -- -- else -- { -- if ( ! (yy_did_buffer_switch_on_eof) ) -- YY_NEW_FILE; -- } -- break; -- } -- -- case EOB_ACT_CONTINUE_SCAN: -- (yy_c_buf_p) = -- (yytext_ptr) + yy_amount_of_matched_text; -- -- yy_current_state = yy_get_previous_state( ); -- -- yy_cp = (yy_c_buf_p); -- yy_bp = (yytext_ptr) + YY_MORE_ADJ; -- goto yy_match; -- -- case EOB_ACT_LAST_MATCH: -- (yy_c_buf_p) = -- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; -- -- yy_current_state = yy_get_previous_state( ); -- -- yy_cp = (yy_c_buf_p); -- yy_bp = (yytext_ptr) + YY_MORE_ADJ; -- goto yy_find_action; -- } -- break; -- } -- -- default: -- YY_FATAL_ERROR( -- "fatal flex scanner internal error--no action found" ); -- } /* end of action switch */ -- } /* end of scanning one token */ --} /* end of yylex */ -+TAO_YY_RULE_SETUP -+TAO_YY_ECHO; -+ break; -+case TAO_YY_STATE_EOF(INITIAL): -+ tao_yyterminate(); -+ -+ case TAO_YY_END_OF_BUFFER: -+ { -+ /* Amount of text matched not including the EOB char. */ -+ int tao_yy_amount_of_matched_text = (int) (tao_yy_cp - tao_yytext_ptr) - 1; -+ -+ /* Undo the effects of TAO_YY_DO_BEFORE_ACTION. */ -+ *tao_yy_cp = tao_yy_hold_char; -+ TAO_YY_RESTORE_TAO_YY_MORE_OFFSET -+ -+ if ( tao_yy_current_buffer->tao_yy_buffer_status == TAO_YY_BUFFER_NEW ) -+ { -+ /* We're scanning a new file or input source. It's -+ * possible that this happened because the user -+ * just pointed tao_yyin at a new source and called -+ * tao_yylex(). If so, then we have to assure -+ * consistency between tao_yy_current_buffer and our -+ * globals. Here is the right place to do so, because -+ * this is the first action (other than possibly a -+ * back-up) that will match for the new input source. -+ */ -+ tao_yy_n_chars = tao_yy_current_buffer->tao_yy_n_chars; -+ tao_yy_current_buffer->tao_yy_input_file = tao_yyin; -+ tao_yy_current_buffer->tao_yy_buffer_status = TAO_YY_BUFFER_NORMAL; -+ } -+ -+ /* Note that here we test for tao_yy_c_buf_p "<=" to the position -+ * of the first EOB in the buffer, since tao_yy_c_buf_p will -+ * already have been incremented past the NUL character -+ * (since all states make transitions on EOB to the -+ * end-of-buffer state). Contrast this with the test -+ * in input(). -+ */ -+ if ( tao_yy_c_buf_p <= &tao_yy_current_buffer->tao_yy_ch_buf[tao_yy_n_chars] ) -+ { /* This was really a NUL. */ -+ tao_yy_state_type tao_yy_next_state; -+ -+ tao_yy_c_buf_p = tao_yytext_ptr + tao_yy_amount_of_matched_text; -+ -+ tao_yy_current_state = tao_yy_get_previous_state(); -+ -+ /* Okay, we're now positioned to make the NUL -+ * transition. We couldn't have -+ * tao_yy_get_previous_state() go ahead and do it -+ * for us because it doesn't know how to deal -+ * with the possibility of jamming (and we don't -+ * want to build jamming into it because then it -+ * will run more slowly). -+ */ -+ -+ tao_yy_next_state = tao_yy_try_NUL_trans( tao_yy_current_state ); -+ -+ tao_yy_bp = tao_yytext_ptr + TAO_YY_MORE_ADJ; -+ -+ if ( tao_yy_next_state ) -+ { -+ /* Consume the NUL. */ -+ tao_yy_cp = ++tao_yy_c_buf_p; -+ tao_yy_current_state = tao_yy_next_state; -+ goto tao_yy_match; -+ } -+ -+ else -+ { -+ tao_yy_cp = tao_yy_c_buf_p; -+ goto tao_yy_find_action; -+ } -+ } -+ -+ else switch ( tao_yy_get_next_buffer() ) -+ { -+ case EOB_ACT_END_OF_FILE: -+ { -+ tao_yy_did_buffer_switch_on_eof = 0; -+ -+ if ( tao_yywrap() ) -+ { -+ /* Note: because we've taken care in -+ * tao_yy_get_next_buffer() to have set up -+ * tao_yytext, we can now set up -+ * tao_yy_c_buf_p so that if some total -+ * hoser (like flex itself) wants to -+ * call the scanner after we return the -+ * TAO_YY_NULL, it'll still work - another -+ * TAO_YY_NULL will get returned. -+ */ -+ tao_yy_c_buf_p = tao_yytext_ptr + TAO_YY_MORE_ADJ; -+ -+ tao_yy_act = TAO_YY_STATE_EOF(TAO_YY_START); -+ goto do_action; -+ } -+ -+ else -+ { -+ if ( ! tao_yy_did_buffer_switch_on_eof ) -+ TAO_YY_NEW_FILE; -+ } -+ break; -+ } -+ -+ case EOB_ACT_CONTINUE_SCAN: -+ tao_yy_c_buf_p = -+ tao_yytext_ptr + tao_yy_amount_of_matched_text; -+ -+ tao_yy_current_state = tao_yy_get_previous_state(); -+ -+ tao_yy_cp = tao_yy_c_buf_p; -+ tao_yy_bp = tao_yytext_ptr + TAO_YY_MORE_ADJ; -+ goto tao_yy_match; -+ -+ case EOB_ACT_LAST_MATCH: -+ tao_yy_c_buf_p = -+ &tao_yy_current_buffer->tao_yy_ch_buf[tao_yy_n_chars]; -+ -+ tao_yy_current_state = tao_yy_get_previous_state(); -+ -+ tao_yy_cp = tao_yy_c_buf_p; -+ tao_yy_bp = tao_yytext_ptr + TAO_YY_MORE_ADJ; -+ goto tao_yy_find_action; -+ } -+ break; -+ } -+ -+ default: -+ TAO_YY_FATAL_ERROR( -+ "fatal flex scanner internal error--no action found" ); -+ } /* end of action switch */ -+ } /* end of scanning one token */ -+ } /* end of tao_yylex */ -+ - --/* yy_get_next_buffer - try to read in a new buffer -+/* tao_yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: -- * EOB_ACT_LAST_MATCH - -- * EOB_ACT_CONTINUE_SCAN - continue scanning from current position -- * EOB_ACT_END_OF_FILE - end of file -- */ --static int yy_get_next_buffer (void) --{ -- register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; -- register char *source = (yytext_ptr); -- register int number_to_move, i; -- int ret_val; -- -- if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) -- YY_FATAL_ERROR( -- "fatal flex scanner internal error--end of buffer missed" ); -- -- if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) -- { /* Don't try to fill the buffer, so this is an EOF. */ -- if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) -- { -- /* We matched a single character, the EOB, so -- * treat this as a final EOF. -- */ -- return EOB_ACT_END_OF_FILE; -- } -- -- else -- { -- /* We matched some text prior to the EOB, first -- * process it. -- */ -- return EOB_ACT_LAST_MATCH; -- } -- } -- -- /* Try to read more data. */ -- -- /* First move last chars to start of buffer. */ -- number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; -- -- for ( i = 0; i < number_to_move; ++i ) -- *(dest++) = *(source++); -- -- if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) -- /* don't do the read, it's not guaranteed to return an EOF, -- * just force an EOF -- */ -- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; -- -- else -- { -- size_t num_to_read = -- YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; -- -- while ( num_to_read <= 0 ) -- { /* Not enough room in the buffer - grow it. */ -- -- /* just a shorter name for the current buffer */ -- YY_BUFFER_STATE b = YY_CURRENT_BUFFER; -- -- int yy_c_buf_p_offset = -- (int) ((yy_c_buf_p) - b->yy_ch_buf); -- -- if ( b->yy_is_our_buffer ) -- { -- int new_size = b->yy_buf_size * 2; -- -- if ( new_size <= 0 ) -- b->yy_buf_size += b->yy_buf_size / 8; -- else -- b->yy_buf_size *= 2; -- -- b->yy_ch_buf = (char *) -- /* Include room in for 2 EOB chars. */ -- yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); -- } -- else -- /* Can't grow it, we don't own it. */ -- b->yy_ch_buf = 0; -- -- if ( ! b->yy_ch_buf ) -- YY_FATAL_ERROR( -- "fatal error - scanner input buffer overflow" ); -- -- (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; -- -- num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - -- number_to_move - 1; -- -- } -- -- if ( num_to_read > YY_READ_BUF_SIZE ) -- num_to_read = YY_READ_BUF_SIZE; -- -- /* Read in more data. */ -- YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), -- (yy_n_chars), num_to_read ); -- -- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); -- } -- -- if ( (yy_n_chars) == 0 ) -- { -- if ( number_to_move == YY_MORE_ADJ ) -- { -- ret_val = EOB_ACT_END_OF_FILE; -- yyrestart(yyin ); -- } -- -- else -- { -- ret_val = EOB_ACT_LAST_MATCH; -- YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = -- YY_BUFFER_EOF_PENDING; -- } -- } -- -- else -- ret_val = EOB_ACT_CONTINUE_SCAN; -- -- (yy_n_chars) += number_to_move; -- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; -- YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; -+ * EOB_ACT_LAST_MATCH - -+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position -+ * EOB_ACT_END_OF_FILE - end of file -+ */ -+ -+static int tao_yy_get_next_buffer() -+ { -+ register char *dest = tao_yy_current_buffer->tao_yy_ch_buf; -+ register char *source = tao_yytext_ptr; -+ register int number_to_move, i; -+ int ret_val; -+ -+ if ( tao_yy_c_buf_p > &tao_yy_current_buffer->tao_yy_ch_buf[tao_yy_n_chars + 1] ) -+ TAO_YY_FATAL_ERROR( -+ "fatal flex scanner internal error--end of buffer missed" ); -+ -+ if ( tao_yy_current_buffer->tao_yy_fill_buffer == 0 ) -+ { /* Don't try to fill the buffer, so this is an EOF. */ -+ if ( tao_yy_c_buf_p - tao_yytext_ptr - TAO_YY_MORE_ADJ == 1 ) -+ { -+ /* We matched a single character, the EOB, so -+ * treat this as a final EOF. -+ */ -+ return EOB_ACT_END_OF_FILE; -+ } -+ -+ else -+ { -+ /* We matched some text prior to the EOB, first -+ * process it. -+ */ -+ return EOB_ACT_LAST_MATCH; -+ } -+ } - -- (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; -+ /* Try to read more data. */ - -- return ret_val; --} -+ /* First move last chars to start of buffer. */ -+ number_to_move = (int) (tao_yy_c_buf_p - tao_yytext_ptr) - 1; - --/* yy_get_previous_state - get the state just before the EOB char was reached */ -+ for ( i = 0; i < number_to_move; ++i ) -+ *(dest++) = *(source++); - -- static yy_state_type yy_get_previous_state (void) --{ -- register yy_state_type yy_current_state; -- register char *yy_cp; -- -- yy_current_state = (yy_start); -- yy_current_state += YY_AT_BOL(); -- -- for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) -- { -- register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); -- if ( yy_accept[yy_current_state] ) -- { -- (yy_last_accepting_state) = yy_current_state; -- (yy_last_accepting_cpos) = yy_cp; -- } -- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) -- { -- yy_current_state = (int) yy_def[yy_current_state]; -- if ( yy_current_state >= 551 ) -- yy_c = yy_meta[(unsigned int) yy_c]; -- } -- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; -- } -+ if ( tao_yy_current_buffer->tao_yy_buffer_status == TAO_YY_BUFFER_EOF_PENDING ) -+ /* don't do the read, it's not guaranteed to return an EOF, -+ * just force an EOF -+ */ -+ tao_yy_current_buffer->tao_yy_n_chars = tao_yy_n_chars = 0; -+ -+ else -+ { -+ int num_to_read = -+ tao_yy_current_buffer->tao_yy_buf_size - number_to_move - 1; -+ -+ while ( num_to_read <= 0 ) -+ { /* Not enough room in the buffer - grow it. */ -+#ifdef TAO_YY_USES_REJECT -+ TAO_YY_FATAL_ERROR( -+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); -+#else -+ -+ /* just a shorter name for the current buffer */ -+ TAO_YY_BUFFER_STATE b = tao_yy_current_buffer; -+ -+ int tao_yy_c_buf_p_offset = -+ (int) (tao_yy_c_buf_p - b->tao_yy_ch_buf); -+ -+ if ( b->tao_yy_is_our_buffer ) -+ { -+ int new_size = b->tao_yy_buf_size * 2; -+ -+ if ( new_size <= 0 ) -+ b->tao_yy_buf_size += b->tao_yy_buf_size / 8; -+ else -+ b->tao_yy_buf_size *= 2; -+ -+ b->tao_yy_ch_buf = (char *) -+ /* Include room in for 2 EOB chars. */ -+ tao_yy_flex_realloc( (void *) b->tao_yy_ch_buf, -+ b->tao_yy_buf_size + 2 ); -+ } -+ else -+ /* Can't grow it, we don't own it. */ -+ b->tao_yy_ch_buf = 0; -+ -+ if ( ! b->tao_yy_ch_buf ) -+ TAO_YY_FATAL_ERROR( -+ "fatal error - scanner input buffer overflow" ); -+ -+ tao_yy_c_buf_p = &b->tao_yy_ch_buf[tao_yy_c_buf_p_offset]; -+ -+ num_to_read = tao_yy_current_buffer->tao_yy_buf_size - -+ number_to_move - 1; -+#endif -+ } -+ -+ if ( num_to_read > TAO_YY_READ_BUF_SIZE ) -+ num_to_read = TAO_YY_READ_BUF_SIZE; -+ -+ /* Read in more data. */ -+ TAO_YY_INPUT( (&tao_yy_current_buffer->tao_yy_ch_buf[number_to_move]), -+ tao_yy_n_chars, num_to_read ); -+ -+ tao_yy_current_buffer->tao_yy_n_chars = tao_yy_n_chars; -+ } -+ -+ if ( tao_yy_n_chars == 0 ) -+ { -+ if ( number_to_move == TAO_YY_MORE_ADJ ) -+ { -+ ret_val = EOB_ACT_END_OF_FILE; -+ tao_yyrestart( tao_yyin ); -+ } -+ -+ else -+ { -+ ret_val = EOB_ACT_LAST_MATCH; -+ tao_yy_current_buffer->tao_yy_buffer_status = -+ TAO_YY_BUFFER_EOF_PENDING; -+ } -+ } -+ -+ else -+ ret_val = EOB_ACT_CONTINUE_SCAN; -+ -+ tao_yy_n_chars += number_to_move; -+ tao_yy_current_buffer->tao_yy_ch_buf[tao_yy_n_chars] = TAO_YY_END_OF_BUFFER_CHAR; -+ tao_yy_current_buffer->tao_yy_ch_buf[tao_yy_n_chars + 1] = TAO_YY_END_OF_BUFFER_CHAR; -+ -+ tao_yytext_ptr = &tao_yy_current_buffer->tao_yy_ch_buf[0]; -+ -+ return ret_val; -+ } - -- return yy_current_state; --} - --/* yy_try_NUL_trans - try to make a transition on the NUL character -+/* tao_yy_get_previous_state - get the state just before the EOB char was reached */ -+ -+static tao_yy_state_type tao_yy_get_previous_state() -+ { -+ register tao_yy_state_type tao_yy_current_state; -+ register char *tao_yy_cp; -+ -+ tao_yy_current_state = tao_yy_start; -+ tao_yy_current_state += TAO_YY_AT_BOL(); -+ -+ for ( tao_yy_cp = tao_yytext_ptr + TAO_YY_MORE_ADJ; tao_yy_cp < tao_yy_c_buf_p; ++tao_yy_cp ) -+ { -+ register TAO_YY_CHAR tao_yy_c = (*tao_yy_cp ? tao_yy_ec[TAO_YY_SC_TO_UI(*tao_yy_cp)] : 1); -+ if ( tao_yy_accept[tao_yy_current_state] ) -+ { -+ tao_yy_last_accepting_state = tao_yy_current_state; -+ tao_yy_last_accepting_cpos = tao_yy_cp; -+ } -+ while ( tao_yy_chk[tao_yy_base[tao_yy_current_state] + tao_yy_c] != tao_yy_current_state ) -+ { -+ tao_yy_current_state = (int) tao_yy_def[tao_yy_current_state]; -+ if ( tao_yy_current_state >= 551 ) -+ tao_yy_c = tao_yy_meta[(unsigned int) tao_yy_c]; -+ } -+ tao_yy_current_state = tao_yy_nxt[tao_yy_base[tao_yy_current_state] + (unsigned int) tao_yy_c]; -+ } -+ -+ return tao_yy_current_state; -+ } -+ -+ -+/* tao_yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis -- * next_state = yy_try_NUL_trans( current_state ); -+ * next_state = tao_yy_try_NUL_trans( current_state ); - */ -- static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) --{ -- register int yy_is_jam; -- register char *yy_cp = (yy_c_buf_p); - -- register YY_CHAR yy_c = 1; -- if ( yy_accept[yy_current_state] ) -- { -- (yy_last_accepting_state) = yy_current_state; -- (yy_last_accepting_cpos) = yy_cp; -- } -- while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) -- { -- yy_current_state = (int) yy_def[yy_current_state]; -- if ( yy_current_state >= 551 ) -- yy_c = yy_meta[(unsigned int) yy_c]; -- } -- yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; -- yy_is_jam = (yy_current_state == 550); -+#ifdef TAO_YY_USE_PROTOS -+static tao_yy_state_type tao_yy_try_NUL_trans( tao_yy_state_type tao_yy_current_state ) -+#else -+static tao_yy_state_type tao_yy_try_NUL_trans( tao_yy_current_state ) -+tao_yy_state_type tao_yy_current_state; -+#endif -+ { -+ register int tao_yy_is_jam; -+ register char *tao_yy_cp = tao_yy_c_buf_p; - -- return yy_is_jam ? 0 : yy_current_state; --} -+ register TAO_YY_CHAR tao_yy_c = 1; -+ if ( tao_yy_accept[tao_yy_current_state] ) -+ { -+ tao_yy_last_accepting_state = tao_yy_current_state; -+ tao_yy_last_accepting_cpos = tao_yy_cp; -+ } -+ while ( tao_yy_chk[tao_yy_base[tao_yy_current_state] + tao_yy_c] != tao_yy_current_state ) -+ { -+ tao_yy_current_state = (int) tao_yy_def[tao_yy_current_state]; -+ if ( tao_yy_current_state >= 551 ) -+ tao_yy_c = tao_yy_meta[(unsigned int) tao_yy_c]; -+ } -+ tao_yy_current_state = tao_yy_nxt[tao_yy_base[tao_yy_current_state] + (unsigned int) tao_yy_c]; -+ tao_yy_is_jam = (tao_yy_current_state == 550); -+ -+ return tao_yy_is_jam ? 0 : tao_yy_current_state; -+ } -+ -+ -+#ifndef TAO_YY_NO_UNPUT -+#ifdef TAO_YY_USE_PROTOS -+static void tao_yyunput( int c, register char *tao_yy_bp ) -+#else -+static void tao_yyunput( c, tao_yy_bp ) -+int c; -+register char *tao_yy_bp; -+#endif -+ { -+ register char *tao_yy_cp = tao_yy_c_buf_p; -+ -+ /* undo effects of setting up tao_yytext */ -+ *tao_yy_cp = tao_yy_hold_char; -+ -+ if ( tao_yy_cp < tao_yy_current_buffer->tao_yy_ch_buf + 2 ) -+ { /* need to shift things up to make room */ -+ /* +2 for EOB chars. */ -+ register int number_to_move = tao_yy_n_chars + 2; -+ register char *dest = &tao_yy_current_buffer->tao_yy_ch_buf[ -+ tao_yy_current_buffer->tao_yy_buf_size + 2]; -+ register char *source = -+ &tao_yy_current_buffer->tao_yy_ch_buf[number_to_move]; -+ -+ while ( source > tao_yy_current_buffer->tao_yy_ch_buf ) -+ *--dest = *--source; -+ -+ tao_yy_cp += (int) (dest - source); -+ tao_yy_bp += (int) (dest - source); -+ tao_yy_current_buffer->tao_yy_n_chars = -+ tao_yy_n_chars = tao_yy_current_buffer->tao_yy_buf_size; -+ -+ if ( tao_yy_cp < tao_yy_current_buffer->tao_yy_ch_buf + 2 ) -+ TAO_YY_FATAL_ERROR( "flex scanner push-back overflow" ); -+ } -+ -+ *--tao_yy_cp = (char) c; -+ -+ -+ tao_yytext_ptr = tao_yy_bp; -+ tao_yy_hold_char = *tao_yy_cp; -+ tao_yy_c_buf_p = tao_yy_cp; -+ } -+#endif /* ifndef TAO_YY_NO_UNPUT */ - -- static void yyunput (int c, register char * yy_bp ) --{ -- register char *yy_cp; -- -- yy_cp = (yy_c_buf_p); -- -- /* undo effects of setting up yytext */ -- *yy_cp = (yy_hold_char); -- -- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) -- { /* need to shift things up to make room */ -- /* +2 for EOB chars. */ -- register int number_to_move = (yy_n_chars) + 2; -- register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ -- YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; -- register char *source = -- &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; -- -- while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) -- *--dest = *--source; -- -- yy_cp += (int) (dest - source); -- yy_bp += (int) (dest - source); -- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = -- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; -- -- if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) -- YY_FATAL_ERROR( "flex scanner push-back overflow" ); -- } -- -- *--yy_cp = (char) c; -- -- (yytext_ptr) = yy_bp; -- (yy_hold_char) = *yy_cp; -- (yy_c_buf_p) = yy_cp; --} - --#ifndef YY_NO_INPUT - #ifdef __cplusplus -- static int yyinput (void) -+static int tao_yyinput() - #else -- static int input (void) -+static int input() - #endif -+ { -+ int c; - --{ -- int c; -- -- *(yy_c_buf_p) = (yy_hold_char); -- -- if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) -- { -- /* yy_c_buf_p now points to the character we want to return. -- * If this occurs *before* the EOB characters, then it's a -- * valid NUL; if not, then we've hit the end of the buffer. -- */ -- if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) -- /* This was really a NUL. */ -- *(yy_c_buf_p) = '\0'; -- -- else -- { /* need more input */ -- int offset = (yy_c_buf_p) - (yytext_ptr); -- ++(yy_c_buf_p); -- -- switch ( yy_get_next_buffer( ) ) -- { -- case EOB_ACT_LAST_MATCH: -- /* This happens because yy_g_n_b() -- * sees that we've accumulated a -- * token and flags that we need to -- * try matching the token before -- * proceeding. But for input(), -- * there's no matching to consider. -- * So convert the EOB_ACT_LAST_MATCH -- * to EOB_ACT_END_OF_FILE. -- */ -- -- /* Reset buffer status. */ -- yyrestart(yyin ); -- -- /*FALLTHROUGH*/ -- -- case EOB_ACT_END_OF_FILE: -- { -- if ( yywrap( ) ) -- return EOF; -+ *tao_yy_c_buf_p = tao_yy_hold_char; -+ -+ if ( *tao_yy_c_buf_p == TAO_YY_END_OF_BUFFER_CHAR ) -+ { -+ /* tao_yy_c_buf_p now points to the character we want to return. -+ * If this occurs *before* the EOB characters, then it's a -+ * valid NUL; if not, then we've hit the end of the buffer. -+ */ -+ if ( tao_yy_c_buf_p < &tao_yy_current_buffer->tao_yy_ch_buf[tao_yy_n_chars] ) -+ /* This was really a NUL. */ -+ *tao_yy_c_buf_p = '\0'; -+ -+ else -+ { /* need more input */ -+ int offset = tao_yy_c_buf_p - tao_yytext_ptr; -+ ++tao_yy_c_buf_p; -+ -+ switch ( tao_yy_get_next_buffer() ) -+ { -+ case EOB_ACT_LAST_MATCH: -+ /* This happens because tao_yy_g_n_b() -+ * sees that we've accumulated a -+ * token and flags that we need to -+ * try matching the token before -+ * proceeding. But for input(), -+ * there's no matching to consider. -+ * So convert the EOB_ACT_LAST_MATCH -+ * to EOB_ACT_END_OF_FILE. -+ */ -+ -+ /* Reset buffer status. */ -+ tao_yyrestart( tao_yyin ); -+ -+ /* fall through */ -+ -+ case EOB_ACT_END_OF_FILE: -+ { -+ if ( tao_yywrap() ) -+ return EOF; - -- if ( ! (yy_did_buffer_switch_on_eof) ) -- YY_NEW_FILE; -+ if ( ! tao_yy_did_buffer_switch_on_eof ) -+ TAO_YY_NEW_FILE; - #ifdef __cplusplus -- return yyinput(); -+ return tao_yyinput(); - #else -- return input(); -+ return input(); - #endif -- } -+ } - -- case EOB_ACT_CONTINUE_SCAN: -- (yy_c_buf_p) = (yytext_ptr) + offset; -- break; -- } -- } -- } -+ case EOB_ACT_CONTINUE_SCAN: -+ tao_yy_c_buf_p = tao_yytext_ptr + offset; -+ break; -+ } -+ } -+ } - -- c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ -- *(yy_c_buf_p) = '\0'; /* preserve yytext */ -- (yy_hold_char) = *++(yy_c_buf_p); -+ c = *(unsigned char *) tao_yy_c_buf_p; /* cast for 8-bit char's */ -+ *tao_yy_c_buf_p = '\0'; /* preserve tao_yytext */ -+ tao_yy_hold_char = *++tao_yy_c_buf_p; - -- YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); -+ tao_yy_current_buffer->tao_yy_at_bol = (c == '\n'); - -- return c; --} --#endif /* ifndef YY_NO_INPUT */ -+ return c; -+ } - --/** Immediately switch to a different input stream. -- * @param input_file A readable stream. -- * -- * @note This function does not reset the start condition to @c INITIAL . -- */ -- void yyrestart (FILE * input_file ) --{ -- -- if ( ! YY_CURRENT_BUFFER ){ -- yyensure_buffer_stack (); -- YY_CURRENT_BUFFER_LVALUE = -- yy_create_buffer(yyin,YY_BUF_SIZE ); -- } - -- yy_init_buffer(YY_CURRENT_BUFFER,input_file ); -- yy_load_buffer_state( ); --} -+#ifdef TAO_YY_USE_PROTOS -+void tao_yyrestart( FILE *input_file ) -+#else -+void tao_yyrestart( input_file ) -+FILE *input_file; -+#endif -+ { -+ if ( ! tao_yy_current_buffer ) -+ tao_yy_current_buffer = tao_yy_create_buffer( tao_yyin, TAO_YY_BUF_SIZE ); - --/** Switch to a different input buffer. -- * @param new_buffer The new input buffer. -- * -- */ -- void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) --{ -- -- /* TODO. We should be able to replace this entire function body -- * with -- * yypop_buffer_state(); -- * yypush_buffer_state(new_buffer); -- */ -- yyensure_buffer_stack (); -- if ( YY_CURRENT_BUFFER == new_buffer ) -- return; -- -- if ( YY_CURRENT_BUFFER ) -- { -- /* Flush out information for old buffer. */ -- *(yy_c_buf_p) = (yy_hold_char); -- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); -- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); -- } -- -- YY_CURRENT_BUFFER_LVALUE = new_buffer; -- yy_load_buffer_state( ); -- -- /* We don't actually know whether we did this switch during -- * EOF (yywrap()) processing, but the only time this flag -- * is looked at is after yywrap() is called, so it's safe -- * to go ahead and always set it. -- */ -- (yy_did_buffer_switch_on_eof) = 1; --} -+ tao_yy_init_buffer( tao_yy_current_buffer, input_file ); -+ tao_yy_load_buffer_state(); -+ } - --static void yy_load_buffer_state (void) --{ -- (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; -- (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; -- yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; -- (yy_hold_char) = *(yy_c_buf_p); --} - --/** Allocate and initialize an input buffer state. -- * @param file A readable stream. -- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. -- * -- * @return the allocated buffer state. -- */ -- YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) --{ -- YY_BUFFER_STATE b; -- -- b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); -- if ( ! b ) -- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); -- -- b->yy_buf_size = size; -- -- /* yy_ch_buf has to be 2 characters longer than the size given because -- * we need to put in 2 end-of-buffer characters. -- */ -- b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); -- if ( ! b->yy_ch_buf ) -- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); -+#ifdef TAO_YY_USE_PROTOS -+void tao_yy_switch_to_buffer( TAO_YY_BUFFER_STATE new_buffer ) -+#else -+void tao_yy_switch_to_buffer( new_buffer ) -+TAO_YY_BUFFER_STATE new_buffer; -+#endif -+ { -+ if ( tao_yy_current_buffer == new_buffer ) -+ return; - -- b->yy_is_our_buffer = 1; -+ if ( tao_yy_current_buffer ) -+ { -+ /* Flush out information for old buffer. */ -+ *tao_yy_c_buf_p = tao_yy_hold_char; -+ tao_yy_current_buffer->tao_yy_buf_pos = tao_yy_c_buf_p; -+ tao_yy_current_buffer->tao_yy_n_chars = tao_yy_n_chars; -+ } - -- yy_init_buffer(b,file ); -+ tao_yy_current_buffer = new_buffer; -+ tao_yy_load_buffer_state(); - -- return b; --} -+ /* We don't actually know whether we did this switch during -+ * EOF (tao_yywrap()) processing, but the only time this flag -+ * is looked at is after tao_yywrap() is called, so it's safe -+ * to go ahead and always set it. -+ */ -+ tao_yy_did_buffer_switch_on_eof = 1; -+ } - --/** Destroy the buffer. -- * @param b a buffer created with yy_create_buffer() -- * -- */ -- void yy_delete_buffer (YY_BUFFER_STATE b ) --{ -- -- if ( ! b ) -- return; - -- if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ -- YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; -+#ifdef TAO_YY_USE_PROTOS -+void tao_yy_load_buffer_state( void ) -+#else -+void tao_yy_load_buffer_state() -+#endif -+ { -+ tao_yy_n_chars = tao_yy_current_buffer->tao_yy_n_chars; -+ tao_yytext_ptr = tao_yy_c_buf_p = tao_yy_current_buffer->tao_yy_buf_pos; -+ tao_yyin = tao_yy_current_buffer->tao_yy_input_file; -+ tao_yy_hold_char = *tao_yy_c_buf_p; -+ } - -- if ( b->yy_is_our_buffer ) -- yyfree((void *) b->yy_ch_buf ); - -- yyfree((void *) b ); --} -+#ifdef TAO_YY_USE_PROTOS -+TAO_YY_BUFFER_STATE tao_yy_create_buffer( FILE *file, int size ) -+#else -+TAO_YY_BUFFER_STATE tao_yy_create_buffer( file, size ) -+FILE *file; -+int size; -+#endif -+ { -+ TAO_YY_BUFFER_STATE b; - --/* Initializes or reinitializes a buffer. -- * This function is sometimes called more than once on the same buffer, -- * such as during a yyrestart() or at EOF. -- */ -- static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) -+ b = (TAO_YY_BUFFER_STATE) tao_yy_flex_alloc( sizeof( struct tao_yy_buffer_state ) ); -+ if ( ! b ) -+ TAO_YY_FATAL_ERROR( "out of dynamic memory in tao_yy_create_buffer()" ); - --{ -- int oerrno = errno; -- -- yy_flush_buffer(b ); -+ b->tao_yy_buf_size = size; - -- b->yy_input_file = file; -- b->yy_fill_buffer = 1; -+ /* tao_yy_ch_buf has to be 2 characters longer than the size given because -+ * we need to put in 2 end-of-buffer characters. -+ */ -+ b->tao_yy_ch_buf = (char *) tao_yy_flex_alloc( b->tao_yy_buf_size + 2 ); -+ if ( ! b->tao_yy_ch_buf ) -+ TAO_YY_FATAL_ERROR( "out of dynamic memory in tao_yy_create_buffer()" ); - -- /* If b is the current buffer, then yy_init_buffer was _probably_ -- * called from yyrestart() or through yy_get_next_buffer. -- * In that case, we don't want to reset the lineno or column. -- */ -- if (b != YY_CURRENT_BUFFER){ -- b->yy_bs_lineno = 1; -- b->yy_bs_column = 0; -- } -+ b->tao_yy_is_our_buffer = 1; - -- b->yy_is_interactive = 0; -- -- errno = oerrno; --} -+ tao_yy_init_buffer( b, file ); - --/** Discard all buffered characters. On the next scan, YY_INPUT will be called. -- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. -- * -- */ -- void yy_flush_buffer (YY_BUFFER_STATE b ) --{ -- if ( ! b ) -- return; -+ return b; -+ } - -- b->yy_n_chars = 0; - -- /* We always need two end-of-buffer characters. The first causes -- * a transition to the end-of-buffer state. The second causes -- * a jam in that state. -- */ -- b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; -- b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; -+#ifdef TAO_YY_USE_PROTOS -+void tao_yy_delete_buffer( TAO_YY_BUFFER_STATE b ) -+#else -+void tao_yy_delete_buffer( b ) -+TAO_YY_BUFFER_STATE b; -+#endif -+ { -+ if ( ! b ) -+ return; - -- b->yy_buf_pos = &b->yy_ch_buf[0]; -+ if ( b == tao_yy_current_buffer ) -+ tao_yy_current_buffer = (TAO_YY_BUFFER_STATE) 0; - -- b->yy_at_bol = 1; -- b->yy_buffer_status = YY_BUFFER_NEW; -+ if ( b->tao_yy_is_our_buffer ) -+ tao_yy_flex_free( (void *) b->tao_yy_ch_buf ); - -- if ( b == YY_CURRENT_BUFFER ) -- yy_load_buffer_state( ); --} -+ tao_yy_flex_free( (void *) b ); -+ } - --/** Pushes the new state onto the stack. The new state becomes -- * the current state. This function will allocate the stack -- * if necessary. -- * @param new_buffer The new state. -- * -- */ --void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) --{ -- if (new_buffer == NULL) -- return; -- -- yyensure_buffer_stack(); -- -- /* This block is copied from yy_switch_to_buffer. */ -- if ( YY_CURRENT_BUFFER ) -- { -- /* Flush out information for old buffer. */ -- *(yy_c_buf_p) = (yy_hold_char); -- YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); -- YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); -- } -- -- /* Only push if top exists. Otherwise, replace top. */ -- if (YY_CURRENT_BUFFER) -- (yy_buffer_stack_top)++; -- YY_CURRENT_BUFFER_LVALUE = new_buffer; -- -- /* copied from yy_switch_to_buffer. */ -- yy_load_buffer_state( ); -- (yy_did_buffer_switch_on_eof) = 1; --} - --/** Removes and deletes the top of the stack, if present. -- * The next element becomes the new top. -- * -- */ --void yypop_buffer_state (void) --{ -- if (!YY_CURRENT_BUFFER) -- return; -- -- yy_delete_buffer(YY_CURRENT_BUFFER ); -- YY_CURRENT_BUFFER_LVALUE = NULL; -- if ((yy_buffer_stack_top) > 0) -- --(yy_buffer_stack_top); -- -- if (YY_CURRENT_BUFFER) { -- yy_load_buffer_state( ); -- (yy_did_buffer_switch_on_eof) = 1; -- } --} -+#ifndef TAO_YY_ALWAYS_INTERACTIVE -+#ifndef TAO_YY_NEVER_INTERACTIVE -+extern int isatty TAO_YY_PROTO(( int )); -+#endif -+#endif - --/* Allocates the stack if it does not exist. -- * Guarantees space for at least one push. -- */ --static void yyensure_buffer_stack (void) --{ -- int num_to_alloc; -- -- if (!(yy_buffer_stack)) { -- -- /* First allocation is just for 2 elements, since we don't know if this -- * scanner will even need a stack. We use 2 instead of 1 to avoid an -- * immediate realloc on the next call. -+#ifdef TAO_YY_USE_PROTOS -+void tao_yy_init_buffer( TAO_YY_BUFFER_STATE b, FILE *file ) -+#else -+void tao_yy_init_buffer( b, file ) -+TAO_YY_BUFFER_STATE b; -+FILE *file; -+#endif -+ -+ -+ { -+ tao_yy_flush_buffer( b ); -+ -+ b->tao_yy_input_file = file; -+ b->tao_yy_fill_buffer = 1; -+ + TAO_YY_RULE_SETUP + TAO_YY_ECHO; +- TAO_YY_BREAK ++ break; + case TAO_YY_STATE_EOF(INITIAL): + tao_yyterminate(); +@@ -2270,8 +2262,8 @@ + b->tao_yy_fill_buffer = 1; + +-#if TAO_YY_ALWAYS_INTERACTIVE +#ifdef TAO_YY_ALWAYS_INTERACTIVE -+ b->tao_yy_is_interactive = 1; -+#else + b->tao_yy_is_interactive = 1; + #else +-#if TAO_YY_NEVER_INTERACTIVE +#ifdef TAO_YY_NEVER_INTERACTIVE -+ b->tao_yy_is_interactive = 0; -+#else -+ b->tao_yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; -+#endif -+#endif -+ } -+ -+ -+#ifdef TAO_YY_USE_PROTOS -+void tao_yy_flush_buffer( TAO_YY_BUFFER_STATE b ) -+#else -+void tao_yy_flush_buffer( b ) -+TAO_YY_BUFFER_STATE b; -+#endif -+ -+ { -+ if ( ! b ) -+ return; -+ -+ b->tao_yy_n_chars = 0; -+ -+ /* We always need two end-of-buffer characters. The first causes -+ * a transition to the end-of-buffer state. The second causes -+ * a jam in that state. - */ -- num_to_alloc = 1; -- (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc -- (num_to_alloc * sizeof(struct yy_buffer_state*) -- ); -- -- memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); -- -- (yy_buffer_stack_max) = num_to_alloc; -- (yy_buffer_stack_top) = 0; -- return; -- } -- -- if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ -- -- /* Increase the buffer to prepare for a possible push. */ -- int grow_size = 8 /* arbitrary grow size */; -- -- num_to_alloc = (yy_buffer_stack_max) + grow_size; -- (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc -- ((yy_buffer_stack), -- num_to_alloc * sizeof(struct yy_buffer_state*) -- ); -- -- /* zero only the new slots.*/ -- memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); -- (yy_buffer_stack_max) = num_to_alloc; -- } --} -+ b->tao_yy_ch_buf[0] = TAO_YY_END_OF_BUFFER_CHAR; -+ b->tao_yy_ch_buf[1] = TAO_YY_END_OF_BUFFER_CHAR; - --/** Setup the input buffer state to scan directly from a user-specified character buffer. -- * @param base the character buffer -- * @param size the size in bytes of the character buffer -- * -- * @return the newly allocated buffer state object. -- */ --YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) --{ -- YY_BUFFER_STATE b; -- -- if ( size < 2 || -- base[size-2] != YY_END_OF_BUFFER_CHAR || -- base[size-1] != YY_END_OF_BUFFER_CHAR ) -- /* They forgot to leave room for the EOB's. */ -- return 0; -- -- b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); -- if ( ! b ) -- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); -- -- b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ -- b->yy_buf_pos = b->yy_ch_buf = base; -- b->yy_is_our_buffer = 0; -- b->yy_input_file = 0; -- b->yy_n_chars = b->yy_buf_size; -- b->yy_is_interactive = 0; -- b->yy_at_bol = 1; -- b->yy_fill_buffer = 0; -- b->yy_buffer_status = YY_BUFFER_NEW; -+ b->tao_yy_buf_pos = &b->tao_yy_ch_buf[0]; - -- yy_switch_to_buffer(b ); -+ b->tao_yy_at_bol = 1; -+ b->tao_yy_buffer_status = TAO_YY_BUFFER_NEW; - -- return b; --} -+ if ( b == tao_yy_current_buffer ) -+ tao_yy_load_buffer_state(); -+ } - --/** Setup the input buffer state to scan a string. The next call to yylex() will -- * scan from a @e copy of @a str. -- * @param str a NUL-terminated string to scan -- * -- * @return the newly allocated buffer state object. -- * @note If you want to scan bytes that may contain NUL values, then use -- * yy_scan_bytes() instead. -- */ --YY_BUFFER_STATE yy_scan_string (yyconst char * yy_str ) --{ -- -- return yy_scan_bytes(yy_str,strlen(yy_str) ); --} - --/** Setup the input buffer state to scan the given bytes. The next call to yylex() will -- * scan from a @e copy of @a bytes. -- * @param bytes the byte buffer to scan -- * @param len the number of bytes in the buffer pointed to by @a bytes. -- * -- * @return the newly allocated buffer state object. -- */ --YY_BUFFER_STATE yy_scan_bytes (yyconst char * bytes, int len ) --{ -- YY_BUFFER_STATE b; -- char *buf; -- yy_size_t n; -- int i; -- -- /* Get memory for full buffer, including space for trailing EOB's. */ -- n = len + 2; -- buf = (char *) yyalloc(n ); -- if ( ! buf ) -- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); -- -- for ( i = 0; i < len; ++i ) -- buf[i] = bytes[i]; -- -- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; -- -- b = yy_scan_buffer(buf,n ); -- if ( ! b ) -- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); -- -- /* It's okay to grow etc. this buffer, and we should throw it -- * away when we're done. -- */ -- b->yy_is_our_buffer = 1; -+#ifndef TAO_YY_NO_SCAN_BUFFER -+#ifdef TAO_YY_USE_PROTOS -+TAO_YY_BUFFER_STATE tao_yy_scan_buffer( char *base, tao_yy_size_t size ) -+#else -+TAO_YY_BUFFER_STATE tao_yy_scan_buffer( base, size ) -+char *base; -+tao_yy_size_t size; -+#endif -+ { -+ TAO_YY_BUFFER_STATE b; -+ -+ if ( size < 2 || -+ base[size-2] != TAO_YY_END_OF_BUFFER_CHAR || -+ base[size-1] != TAO_YY_END_OF_BUFFER_CHAR ) -+ /* They forgot to leave room for the EOB's. */ -+ return 0; - -- return b; --} -+ b = (TAO_YY_BUFFER_STATE) tao_yy_flex_alloc( sizeof( struct tao_yy_buffer_state ) ); -+ if ( ! b ) -+ TAO_YY_FATAL_ERROR( "out of dynamic memory in tao_yy_scan_buffer()" ); - --#ifndef YY_EXIT_FAILURE --#define YY_EXIT_FAILURE 2 -+ b->tao_yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ -+ b->tao_yy_buf_pos = b->tao_yy_ch_buf = base; -+ b->tao_yy_is_our_buffer = 0; -+ b->tao_yy_input_file = 0; -+ b->tao_yy_n_chars = b->tao_yy_buf_size; -+ b->tao_yy_is_interactive = 0; -+ b->tao_yy_at_bol = 1; -+ b->tao_yy_fill_buffer = 0; -+ b->tao_yy_buffer_status = TAO_YY_BUFFER_NEW; -+ -+ tao_yy_switch_to_buffer( b ); -+ -+ return b; -+ } - #endif - --static void yy_fatal_error (yyconst char* msg ) --{ -- (void) fprintf( stderr, "%s\n", msg ); -- exit( YY_EXIT_FAILURE ); --} - --/* Redefine yyless() so it works in section 3 code. */ -+#ifndef TAO_YY_NO_SCAN_STRING -+#ifdef TAO_YY_USE_PROTOS -+TAO_YY_BUFFER_STATE tao_yy_scan_string( tao_yyconst char *tao_yy_str ) -+#else -+TAO_YY_BUFFER_STATE tao_yy_scan_string( tao_yy_str ) -+tao_yyconst char *tao_yy_str; -+#endif -+ { -+ int len; -+ for ( len = 0; tao_yy_str[len]; ++len ) -+ ; - --#undef yyless --#define yyless(n) \ -- do \ -- { \ -- /* Undo effects of setting up yytext. */ \ -- int yyless_macro_arg = (n); \ -- YY_LESS_LINENO(yyless_macro_arg);\ -- yytext[yyleng] = (yy_hold_char); \ -- (yy_c_buf_p) = yytext + yyless_macro_arg; \ -- (yy_hold_char) = *(yy_c_buf_p); \ -- *(yy_c_buf_p) = '\0'; \ -- yyleng = yyless_macro_arg; \ -- } \ -- while ( 0 ) -- --/* Accessor methods (get/set functions) to struct members. */ -+ return tao_yy_scan_bytes( tao_yy_str, len ); -+ } -+#endif - --/** Get the current line number. -- * -- */ --int yyget_lineno (void) --{ -- -- return yylineno; --} - --/** Get the input stream. -- * -- */ --FILE *yyget_in (void) --{ -- return yyin; --} -+#ifndef TAO_YY_NO_SCAN_BYTES -+#ifdef TAO_YY_USE_PROTOS -+TAO_YY_BUFFER_STATE tao_yy_scan_bytes( tao_yyconst char *bytes, int len ) -+#else -+TAO_YY_BUFFER_STATE tao_yy_scan_bytes( bytes, len ) -+tao_yyconst char *bytes; -+int len; -+#endif -+ { -+ TAO_YY_BUFFER_STATE b; -+ char *buf; -+ tao_yy_size_t n; -+ int i; - --/** Get the output stream. -- * -- */ --FILE *yyget_out (void) --{ -- return yyout; --} -+ /* Get memory for full buffer, including space for trailing EOB's. */ -+ n = len + 2; -+ buf = (char *) tao_yy_flex_alloc( n ); -+ if ( ! buf ) -+ TAO_YY_FATAL_ERROR( "out of dynamic memory in tao_yy_scan_bytes()" ); -+ -+ for ( i = 0; i < len; ++i ) -+ buf[i] = bytes[i]; -+ -+ buf[len] = buf[len+1] = TAO_YY_END_OF_BUFFER_CHAR; -+ -+ b = tao_yy_scan_buffer( buf, n ); -+ if ( ! b ) -+ TAO_YY_FATAL_ERROR( "bad buffer in tao_yy_scan_bytes()" ); - --/** Get the length of the current token. -- * -- */ --int yyget_leng (void) --{ -- return yyleng; --} -+ /* It's okay to grow etc. this buffer, and we should throw it -+ * away when we're done. -+ */ -+ b->tao_yy_is_our_buffer = 1; - --/** Get the current token. -- * -- */ -+ return b; -+ } -+#endif - --char *yyget_text (void) --{ -- return yytext; --} - --/** Set the current line number. -- * @param line_number -- * -- */ --void yyset_lineno (int line_number ) --{ -- -- yylineno = line_number; --} -+#ifndef TAO_YY_NO_PUSH_STATE -+#ifdef TAO_YY_USE_PROTOS -+static void tao_yy_push_state( int new_state ) -+#else -+static void tao_yy_push_state( new_state ) -+int new_state; -+#endif -+ { -+ if ( tao_yy_start_stack_ptr >= tao_yy_start_stack_depth ) -+ { -+ tao_yy_size_t new_size; - --/** Set the input stream. This does not discard the current -- * input buffer. -- * @param in_str A readable stream. -- * -- * @see yy_switch_to_buffer -- */ --void yyset_in (FILE * in_str ) --{ -- yyin = in_str ; --} -+ tao_yy_start_stack_depth += TAO_YY_START_STACK_INCR; -+ new_size = tao_yy_start_stack_depth * sizeof( int ); - --void yyset_out (FILE * out_str ) --{ -- yyout = out_str ; --} -+ if ( ! tao_yy_start_stack ) -+ tao_yy_start_stack = (int *) tao_yy_flex_alloc( new_size ); - --int yyget_debug (void) --{ -- return yy_flex_debug; --} -+ else -+ tao_yy_start_stack = (int *) tao_yy_flex_realloc( -+ (void *) tao_yy_start_stack, new_size ); - --void yyset_debug (int bdebug ) --{ -- yy_flex_debug = bdebug ; --} -+ if ( ! tao_yy_start_stack ) -+ TAO_YY_FATAL_ERROR( -+ "out of memory expanding start-condition stack" ); -+ } - --/* yylex_destroy is for both reentrant and non-reentrant scanners. */ --int yylex_destroy (void) --{ -- -- /* Pop the buffer stack, destroying each element. */ -- while(YY_CURRENT_BUFFER){ -- yy_delete_buffer(YY_CURRENT_BUFFER ); -- YY_CURRENT_BUFFER_LVALUE = NULL; -- yypop_buffer_state(); -- } -- -- /* Destroy the stack itself. */ -- yyfree((yy_buffer_stack) ); -- (yy_buffer_stack) = NULL; -+ tao_yy_start_stack[tao_yy_start_stack_ptr++] = TAO_YY_START; - -- return 0; --} -+ BEGIN(new_state); -+ } -+#endif - --/* -- * Internal utility routines. -- */ - --#ifndef yytext_ptr --static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) --{ -- register int i; -- for ( i = 0; i < n; ++i ) -- s1[i] = s2[i]; --} -+#ifndef TAO_YY_NO_POP_STATE -+static void tao_yy_pop_state() -+ { -+ if ( --tao_yy_start_stack_ptr < 0 ) -+ TAO_YY_FATAL_ERROR( "start-condition stack underflow" ); -+ -+ BEGIN(tao_yy_start_stack[tao_yy_start_stack_ptr]); -+ } - #endif - --#ifdef YY_NEED_STRLEN --static int yy_flex_strlen (yyconst char * s ) --{ -- register int n; -- for ( n = 0; s[n]; ++n ) -- ; - -- return n; --} -+#ifndef TAO_YY_NO_TOP_STATE -+static int tao_yy_top_state() -+ { -+ return tao_yy_start_stack[tao_yy_start_stack_ptr - 1]; -+ } - #endif - --void *yyalloc (yy_size_t size ) --{ -- return (void *) malloc( size ); --} -+#ifndef TAO_YY_EXIT_FAILURE -+#define TAO_YY_EXIT_FAILURE 2 -+#endif - --void *yyrealloc (void * ptr, yy_size_t size ) --{ -- /* The cast to (char *) in the following accommodates both -- * implementations that use char* generic pointers, and those -- * that use void* generic pointers. It works with the latter -- * because both ANSI C and C++ allow castless assignment from -- * any pointer type to void*, and deal with argument conversions -- * as though doing an assignment. -- */ -- return (void *) realloc( (char *) ptr, size ); --} -+#ifdef TAO_YY_USE_PROTOS -+static void tao_yy_fatal_error( tao_yyconst char msg[] ) -+#else -+static void tao_yy_fatal_error( msg ) -+char msg[]; -+#endif -+ { -+ (void) fprintf( stderr, "%s\n", msg ); -+ exit( TAO_YY_EXIT_FAILURE ); -+ } - --void yyfree (void * ptr ) --{ -- free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ --} - --#define YYTABLES_NAME "yytables" - --#undef YY_NEW_FILE --#undef YY_FLUSH_BUFFER --#undef yy_set_bol --#undef yy_new_buffer --#undef yy_set_interactive --#undef yytext_ptr --#undef YY_DO_BEFORE_ACTION -- --#ifdef YY_DECL_IS_OURS --#undef YY_DECL_IS_OURS --#undef YY_DECL -+/* Redefine tao_yyless() so it works in section 3 code. */ -+ -+#undef tao_yyless -+#define tao_yyless(n) \ -+ do \ -+ { \ -+ /* Undo effects of setting up tao_yytext. */ \ -+ tao_yytext[tao_yyleng] = tao_yy_hold_char; \ -+ tao_yy_c_buf_p = tao_yytext + n; \ -+ tao_yy_hold_char = *tao_yy_c_buf_p; \ -+ *tao_yy_c_buf_p = '\0'; \ -+ tao_yyleng = n; \ -+ } \ -+ while ( 0 ) -+ -+ -+/* Internal utility routines. */ -+ -+#ifndef tao_yytext_ptr -+#ifdef TAO_YY_USE_PROTOS -+static void tao_yy_flex_strncpy( char *s1, tao_yyconst char *s2, int n ) -+#else -+static void tao_yy_flex_strncpy( s1, s2, n ) -+char *s1; -+tao_yyconst char *s2; -+int n; -+#endif -+ { -+ register int i; -+ for ( i = 0; i < n; ++i ) -+ s1[i] = s2[i]; -+ } - #endif + b->tao_yy_is_interactive = 0; + #else +@@ -2564,5 +2541,5 @@ + } -- /* subroutines */ -+#ifdef TAO_YY_NEED_STRLEN -+#ifdef TAO_YY_USE_PROTOS -+static int tao_yy_flex_strlen( tao_yyconst char *s ) -+#else -+static int tao_yy_flex_strlen( s ) -+tao_yyconst char *s; -+#endif -+ { -+ register int n; -+ for ( n = 0; s[n]; ++n ) -+ ; -+ -+ return n; -+ } -+#endif -+ -+ -+#ifdef TAO_YY_USE_PROTOS -+static void *tao_yy_flex_alloc( tao_yy_size_t size ) -+#else -+static void *tao_yy_flex_alloc( size ) -+tao_yy_size_t size; -+#endif -+ { -+ return (void *) malloc( size ); -+ } -+ -+#ifdef TAO_YY_USE_PROTOS -+static void *tao_yy_flex_realloc( void *ptr, tao_yy_size_t size ) -+#else -+static void *tao_yy_flex_realloc( ptr, size ) -+void *ptr; -+tao_yy_size_t size; -+#endif -+ { -+ /* The cast to (char *) in the following accommodates both -+ * implementations that use char* generic pointers, and those -+ * that use void* generic pointers. It works with the latter -+ * because both ANSI C and C++ allow castless assignment from -+ * any pointer type to void*, and deal with argument conversions -+ * as though doing an assignment. -+ */ -+ return (void *) realloc( (char *) ptr, size ); -+ } -+ -+#ifdef TAO_YY_USE_PROTOS -+static void tao_yy_flex_free( void *ptr ) -+#else -+static void tao_yy_flex_free( ptr ) -+void *ptr; -+#endif -+ { -+ free( ptr ); -+ } -+ +-#if TAO_YY_MAIN +#ifdef TAO_YY_MAIN -+int main() -+ { -+ tao_yylex(); -+ return 0; -+ } -+#endif -+ -+ /* subroutines */ - - // Parse a #line statement generated by the C preprocessor - static void -@@ -2813,10 +2648,10 @@ - { - if (h[j] == '\\' && h[j + 1] == '\\') - { -- j++; -+ j++; - } - -- h[i] = h[j]; -+ h[i] = h[j]; - } - - h[i] = '\0'; -@@ -2845,7 +2680,7 @@ - - // Strip off any command line -I prefix that may have been added - // by the preprocessor. -- if (!(idl_global->in_main_file ()) && idl_global->import ()) -+ if (!(idl_global->in_main_file ()) && idl_global->import ()) - { - ACE_NEW ( - nm, -@@ -2957,7 +2792,7 @@ - ext_id.set (idl_global->filename ()->get_string (), - 0); - char *int_id = ACE::strnew (new_prefix); -- (void) idl_global->file_prefixes ().rebind (ext_id, -+ (void) idl_global->file_prefixes ().rebind (ext_id, - int_id); - } - } -@@ -2992,7 +2827,7 @@ - len = ACE_OS::strlen (number); - } - -- // This call adds a proper null terminator to tmp, so no need to -+ // This call adds a proper null terminator to tmp, so no need to - // do it here. - AST_Decl *d = idl_find_node (tmp); - -@@ -3009,7 +2844,7 @@ - - d->version (ACE::strnew (number)); - } -- else if (ACE_OS::strncmp (buf + 8, "ident", 5) == 0) -+ else if (ACE_OS::strncmp (buf + 8, "ident", 5) == 0) - { - idl_global->ident_string (buf + 8); - } -@@ -3039,7 +2874,7 @@ - new_id); - return; - } -- -+ - d->repoID (new_id); - d->typeid_set (I_TRUE); - } -@@ -3137,24 +2972,24 @@ - double e, k; - long neg = 0, negexp = 0; - -- if (*s == '-') -+ if (*s == '-') - { - neg = 1; - s++; - } - -- while (*s >= '0' && *s <= '9') -+ while (*s >= '0' && *s <= '9') - { - d = (d * 10) + *s - '0'; - s++; - } - -- if (*s == '.') -+ if (*s == '.') - { - s++; - e = 10; - -- while (*s >= '0' && *s <= '9') -+ while (*s >= '0' && *s <= '9') - { - d += (*s - '0') / (e * 1.0); - e *= 10; -@@ -3162,15 +2997,15 @@ - } - } - -- if (*s == 'e' || *s == 'E') -+ if (*s == 'e' || *s == 'E') - { - s++; - -- if (*s == '-') -+ if (*s == '-') - { - negexp = 1; - s++; -- } -+ } - else if (*s == '+') - { - s++; -@@ -3178,13 +3013,13 @@ - - e = 0; - -- while (*s >= '0' && *s <= '9') -+ while (*s >= '0' && *s <= '9') - { - e = (e * 10) + *s - '0'; - s++; - } - -- if (e > 0) -+ if (e > 0) - { - for (k = 1; e > 0; k *= 10, e--); - -@@ -3199,7 +3034,7 @@ - } - } - -- if (neg) -+ if (neg) - { - d *= -1.0; - } -@@ -3215,74 +3050,74 @@ - char *str - ) - { -- if (str[0] != '\\') -+ if (str[0] != '\\') - { -- return str[0]; -+ return str[0]; - } - -- switch (str[1]) -+ switch (str[1]) - { - case 'n': -- return '\n'; -+ return '\n'; - case 't': -- return '\t'; -+ return '\t'; - case 'v': -- return '\v'; -+ return '\v'; - case 'b': -- return '\b'; -+ return '\b'; - case 'r': -- return '\r'; -+ return '\r'; - case 'f': -- return '\f'; -+ return '\f'; - case 'a': -- return '\a'; -+ return '\a'; - case '\\': -- return '\\'; -+ return '\\'; - case '\?': -- return '?'; -+ return '?'; - case '\'': -- return '\''; -+ return '\''; - case '"': -- return '"'; -+ return '"'; - case 'x': -- { -- int i; -+ { -+ int i; - -- // hex value -- for (i = 2; str[i] != '\0' && isxdigit (str[i]); ++i) -+ // hex value -+ for (i = 2; str[i] != '\0' && isxdigit(str[i]); ++i) - { -- continue; -- } -+ continue; -+ } - -- char save = str[i]; -- str[i] = '\0'; -- char out = (char)idl_atoui(&str[2], 16); -- str[i] = save; -- return out; -- } -- ACE_NOTREACHED (break;) -+ char save = str[i]; -+ str[i] = '\0'; -+ char out = (char)idl_atoui(&str[2], 16); -+ str[i] = save; -+ return out; -+ } -+ ACE_NOTREACHED (break;) - default: -- // check for octal value -- if (str[1] >= '0' && str[1] <= '7') -+ // check for octal value -+ if (str[1] >= '0' && str[1] <= '7') - { -- int i; -+ int i; - -- for (i = 1; str[i] >= '0' && str[i] <= '7'; ++i) -+ for (i = 1; str[i] >= '0' && str[i] <= '7'; ++i) - { -- continue; -- } -+ continue; -+ } - -- char save = str[i]; -- str[i] = '\0'; -- char out = (char)idl_atoui(&str[1], 8); -- str[i] = save; -- return out; -- } -- else -- { -- return str[1] - 'a'; -- } -- ACE_NOTREACHED (break;) -+ char save = str[i]; -+ str[i] = '\0'; -+ char out = (char)idl_atoui(&str[1], 8); -+ str[i] = save; -+ return out; -+ } -+ else -+ { -+ return str[1] - 'a'; -+ } -+ ACE_NOTREACHED (break;) - } - } - /* -@@ -3302,6 +3137,7 @@ - { - continue; - } -+ - char save = str[i]; - str[i] = '\0'; - ACE_CDR::WChar out = (ACE_CDR::WChar) idl_atoui (&str[2], 16); -@@ -3425,4 +3261,3 @@ - - return d; - } -- + int main() + { diff --git a/TAO/TAO_IDL/fe/y.tab.cpp b/TAO/TAO_IDL/fe/y.tab.cpp index 493280ecb2b..11575f7573d 100644 --- a/TAO/TAO_IDL/fe/y.tab.cpp +++ b/TAO/TAO_IDL/fe/y.tab.cpp @@ -6769,6 +6769,14 @@ tao_yyreduce: ud.impl = interface_type; ud.is_multiple = tao_yyvsp[-2].bval; c->uses ().enqueue_tail (ud); + + if (ud.is_multiple == I_TRUE) + { + // These datatypes must be created in the + // front end so they can be looked up + // when compiling the generated executor IDL. + idl_global->create_uses_multiple_stuff (c, ud); + } } } break; diff --git a/TAO/TAO_IDL/include/ast_component.h b/TAO/TAO_IDL/include/ast_component.h index 675d79f1815..87a09901031 100644 --- a/TAO/TAO_IDL/include/ast_component.h +++ b/TAO/TAO_IDL/include/ast_component.h @@ -24,14 +24,6 @@ public: // This also calls the base class version. virtual void redefine (AST_Interface *from); - // Extend lookup to the base component. - virtual AST_Decl *look_in_inherited (UTL_ScopedName *e, - idl_bool treat_as_ref); - - // Extend lookup to the supported interfaces. - virtual AST_Decl *look_in_supported (UTL_ScopedName *e, - idl_bool treat_as_ref); - // Utility data structure for port declarations. struct port_description { diff --git a/TAO/TAO_IDL/include/ast_expression.h b/TAO/TAO_IDL/include/ast_expression.h index 2c0c017ee36..76b1dfaa804 100644 --- a/TAO/TAO_IDL/include/ast_expression.h +++ b/TAO/TAO_IDL/include/ast_expression.h @@ -110,7 +110,6 @@ public: // @@ (JP) I added these to get the ~ operator to work with all the // relevant aritmetic types, but eventually, we should get rid of // this whole enum. - , EK_bool , EK_short , EK_ushort , EK_long @@ -286,7 +285,7 @@ public: protected: // Evaluate different sets of operators. - AST_ExprValue *eval_bin_op (void); + AST_ExprValue *eval_bin_op (EvalKind ek); AST_ExprValue *eval_bit_op (EvalKind ek); diff --git a/TAO/TAO_IDL/include/ast_home.h b/TAO/TAO_IDL/include/ast_home.h index 1bf5818b68c..f68276c7adc 100644 --- a/TAO/TAO_IDL/include/ast_home.h +++ b/TAO/TAO_IDL/include/ast_home.h @@ -27,14 +27,6 @@ public: virtual ~AST_Home (void); - // Extend lookup to the base home. - virtual AST_Decl *look_in_inherited (UTL_ScopedName *e, - idl_bool treat_as_ref); - - // Extend lookup to the supported interfaces. - virtual AST_Decl *look_in_supported (UTL_ScopedName *e, - idl_bool treat_as_ref); - // Accessors. AST_Home *base_home (void) const; diff --git a/TAO/TAO_IDL/include/ast_interface.h b/TAO/TAO_IDL/include/ast_interface.h index 8aeb582807e..5696d39a464 100644 --- a/TAO/TAO_IDL/include/ast_interface.h +++ b/TAO/TAO_IDL/include/ast_interface.h @@ -126,9 +126,6 @@ public: // and check if there is such a clash among the parents virtual idl_bool redef_clash (void); - // Look through inherited interfaces. - virtual AST_Decl *look_in_inherited (UTL_ScopedName *e, - idl_bool treat_as_ref); // Cleanup function. virtual void destroy (void); diff --git a/TAO/TAO_IDL/include/ast_module.h b/TAO/TAO_IDL/include/ast_module.h index 88f33844aea..69d53f9df6e 100644 --- a/TAO/TAO_IDL/include/ast_module.h +++ b/TAO/TAO_IDL/include/ast_module.h @@ -108,11 +108,6 @@ public: int be_add_interface (AST_Interface *i, AST_Interface *ix = 0); - // Has this node been referenced here already? - // Override of method in UTL_Scope. - virtual idl_bool referenced (AST_Decl *e, - Identifier *id = 0); - // Add decls from previous opening of this module to the // 'previous' set of this module, along with the argument's // own 'previous' set. diff --git a/TAO/TAO_IDL/include/ast_valuetype.h b/TAO/TAO_IDL/include/ast_valuetype.h index 2aa0a8de653..4090d3d453d 100644 --- a/TAO/TAO_IDL/include/ast_valuetype.h +++ b/TAO/TAO_IDL/include/ast_valuetype.h @@ -43,10 +43,6 @@ public: virtual idl_bool will_have_factory (void); // Called from y.tab.cpp to set the factory decl seen bit. - // Look up a scoped name in the supported interface list. - virtual AST_Decl *look_in_supported (UTL_ScopedName *, - idl_bool treat_as_ref); - // Cleanup function. virtual void destroy (void); diff --git a/TAO/TAO_IDL/include/idl_defines.h b/TAO/TAO_IDL/include/idl_defines.h index ddc497d86a2..e6395d1f3e2 100644 --- a/TAO/TAO_IDL/include/idl_defines.h +++ b/TAO/TAO_IDL/include/idl_defines.h @@ -67,8 +67,6 @@ trademarks or registered trademarks of Sun Microsystems, Inc. #ifndef _IDL_DEFINES_IDL_DEFINES_HH #define _IDL_DEFINES_IDL_DEFINES_HH -#include "ace/os_include/os_limits.h" - /* * idl_defines.hh - Defines global compiler flags */ diff --git a/TAO/TAO_IDL/include/idl_global.h b/TAO/TAO_IDL/include/idl_global.h index e0cb760293e..39ac2a0cb32 100644 --- a/TAO/TAO_IDL/include/idl_global.h +++ b/TAO/TAO_IDL/include/idl_global.h @@ -463,6 +463,12 @@ public: virtual const char *ident_string (void) const; // Get the value of the #ident string. + virtual void obv_support (idl_bool); + // set enable/disable OBV (Valuetype) support + + virtual idl_bool obv_support (void); + // check if OBV (Valuetype) support is enabled + virtual void case_diff_error (idl_bool); // report an error (1) for indentifiers in the same scope // that differ only by case, or report a warning (0). @@ -529,11 +535,12 @@ public: ACE_Hash_Map_Manager<ACE_CString, char *, ACE_Null_Mutex> & file_prefixes (void); - // Accessor for the IDL file prefix container. + // Accessor for the IDL keyword container. - idl_bool pass_orb_idl (void) const; - void pass_orb_idl (idl_bool val); - // Accessor for the pass_orb_idl_ member. + void create_uses_multiple_stuff (AST_Component *c, + AST_Component::port_description &pd); + // We must do this in the front end since the executor + // mapping IDL will have these data types. int check_gperf (void); // Currently called only from IDL backend, but could be useful elsewhere. @@ -593,6 +600,9 @@ private: // Holds a string that begins with #ident, to be passed from the IDL // file to the generated files. + idl_bool obv_support_; + // Do we support OBV (Valuetype)? + idl_bool case_diff_error_; // Do we report an error for indentifiers in the same scope that differ // only by case? or just a warning? @@ -620,9 +630,6 @@ private: ACE_Hash_Map_Manager<ACE_CString, char *, ACE_Null_Mutex> file_prefixes_; // Associates a prefix with a file. - - idl_bool pass_orb_idl_; - // Treat orb.idl like any other included IDL file. }; diff --git a/TAO/TAO_IDL/include/utl_err.h b/TAO/TAO_IDL/include/utl_err.h index 5983c4ce49e..03741e30463 100644 --- a/TAO/TAO_IDL/include/utl_err.h +++ b/TAO/TAO_IDL/include/utl_err.h @@ -134,7 +134,6 @@ public: EIDL_UNDERSCORE, // More than one leading underscore EIDL_EMPTY_MODULE, // Empty modules not allowed in IDL. EIDL_BACK_END, // Back end error - EIDL_ILLEGAL_INFIX, // Illegal infix operator in expression EIDL_OK // No error }; @@ -227,10 +226,16 @@ public: void abstract_inheritance_error (UTL_ScopedName *v, UTL_ScopedName *i); - // Report an attempt to support more then one concrete type. + // Report an attempt to support more then one abstract type. void abstract_support_error (UTL_ScopedName *v, UTL_ScopedName *i); + // Report a situation where a concrete interface was expected but we got + // something else instead. This most likely is a case in a supports + // or inheritance list. + void concrete_interface_expected (UTL_ScopedName *c, + UTL_ScopedName *i); + // Report a situation where a non-local interface was expected but we got // something else instead. This most likely is a case in a supports // or inheritance list. @@ -320,10 +325,6 @@ public: // Report back-end error void back_end (long lineno, UTL_String *s); - - // Report illegal infix operator error (they can be used - // only with integer, floating point or fixed point expressions. - void illegal_infix (void); }; #endif // _UTL_ERR_UTL_ERR_HH diff --git a/TAO/TAO_IDL/include/utl_scope.h b/TAO/TAO_IDL/include/utl_scope.h index b9d990d2b36..f8d4c067b00 100644 --- a/TAO/TAO_IDL/include/utl_scope.h +++ b/TAO/TAO_IDL/include/utl_scope.h @@ -291,17 +291,13 @@ protected: void add_to_local_types (AST_Decl *e); // Has this node been referenced here already? - virtual idl_bool referenced (AST_Decl *e, - Identifier *id = 0); + idl_bool referenced (AST_Decl *e, + Identifier *id = 0); - // Look up a scoped name in the inherited list. + // Look up a scoped name in the inherited interfaces of an + // interface. virtual AST_Decl *look_in_inherited (UTL_ScopedName *, idl_bool treat_as_ref); - - // Look up a scoped name in the supported interface list. - virtual AST_Decl *look_in_supported (UTL_ScopedName *, - idl_bool treat_as_ref); - // Lookup based on the local name. AST_Decl *lookup_for_add (AST_Decl *d, idl_bool treat_as_ref); diff --git a/TAO/TAO_IDL/util/utl_err.cpp b/TAO/TAO_IDL/util/utl_err.cpp index 51b2afc7e7c..98a9f56c6ff 100644 --- a/TAO/TAO_IDL/util/utl_err.cpp +++ b/TAO/TAO_IDL/util/utl_err.cpp @@ -199,8 +199,6 @@ error_string (UTL_Error::ErrorCode c) return "module must contain at least one declaration: "; case UTL_Error::EIDL_BACK_END: return "back end: "; - case UTL_Error::EIDL_ILLEGAL_INFIX: - return "illegal infix operator in expression"; } return 0; @@ -945,7 +943,26 @@ UTL_Error::abstract_support_error (UTL_ScopedName *v, idl_global->set_err_count (idl_global->err_count () + 1); } -// Report illegal component or home support of local interface. +// Report illegal component or home support of abstract interface. +void +UTL_Error::concrete_interface_expected (UTL_ScopedName *c, + UTL_ScopedName *i) +{ + idl_error_header (EIDL_CANT_SUPPORT, + idl_global->lineno (), + idl_global->filename ()); + ACE_ERROR ((LM_ERROR, + " component or home ")); + c->dump (*ACE_DEFAULT_LOG_STREAM); + ACE_ERROR ((LM_ERROR, + " attempts to support an abstract interface: ")); + i->dump (*ACE_DEFAULT_LOG_STREAM); + ACE_ERROR ((LM_ERROR, + "\n")); + idl_global->set_err_count (idl_global->err_count () + 1); +} + +// Report illegal component or home support of abstract interface. void UTL_Error::unconstrained_interface_expected (UTL_ScopedName *c, UTL_ScopedName *i) @@ -1339,19 +1356,6 @@ UTL_Error::back_end (long lineno, idl_error_header (EIDL_BACK_END, lineno, s); - ACE_ERROR ((LM_ERROR, - "\n")); - idl_global->set_err_count (idl_global->err_count () + 1); -} - -void -UTL_Error::illegal_infix (void) -{ - idl_error_header (EIDL_ILLEGAL_INFIX, - idl_global->lineno (), - idl_global->filename ()); - ACE_ERROR ((LM_ERROR, - "\n")); idl_global->set_err_count (idl_global->err_count () + 1); } diff --git a/TAO/TAO_IDL/util/utl_global.cpp b/TAO/TAO_IDL/util/utl_global.cpp index 008eae5be2c..2059501580e 100644 --- a/TAO/TAO_IDL/util/utl_global.cpp +++ b/TAO/TAO_IDL/util/utl_global.cpp @@ -179,11 +179,11 @@ IDL_GlobalData::IDL_GlobalData (void) gperf_path_ (0), temp_dir_ (0), ident_string_ (0), + obv_support_ (I_TRUE), case_diff_error_ (I_TRUE), nest_orb_ (I_FALSE), idl_flags_ (""), - preserve_cpp_keywords_ (I_TRUE), - pass_orb_idl_ (I_FALSE) + preserve_cpp_keywords_ (I_TRUE) { // Path for the perfect hash generator(gperf) program. // Default is $ACE_ROOT/bin/gperf unless ACE_GPERF is defined. @@ -191,7 +191,6 @@ IDL_GlobalData::IDL_GlobalData (void) // in the environment. // Form the absolute pathname. char* ace_root = ACE_OS::getenv ("ACE_ROOT"); - if (ace_root == 0) // This may not cause any problem if -g option is used to specify // the correct path for the gperf program. Let us ignore this @@ -981,6 +980,18 @@ IDL_GlobalData::ident_string (void) const } void +IDL_GlobalData::obv_support (idl_bool val) +{ + this->obv_support_ = val; +} + +idl_bool +IDL_GlobalData::obv_support (void) +{ + return this->obv_support_; +} + +void IDL_GlobalData::case_diff_error (idl_bool val) { this->case_diff_error_ = val; @@ -1308,16 +1319,86 @@ IDL_GlobalData::file_prefixes (void) return this->file_prefixes_; } -idl_bool -IDL_GlobalData::pass_orb_idl (void) const -{ - return this->pass_orb_idl_; -} - void -IDL_GlobalData::pass_orb_idl (idl_bool val) +IDL_GlobalData::create_uses_multiple_stuff ( + AST_Component *c, + AST_Component::port_description &pd + ) { - this->pass_orb_idl_ = val; + ACE_CString struct_name (pd.id->get_string ()); + struct_name += "Connection"; + Identifier struct_id (struct_name.c_str ()); + UTL_ScopedName sn (&struct_id, 0); + AST_Structure *connection = + idl_global->gen ()->create_structure (&sn, 0, 0); + struct_id.destroy (); + + Identifier object_id ("objref"); + UTL_ScopedName object_name (&object_id, + 0); + AST_Field *object_field = + idl_global->gen ()->create_field (pd.impl, + &object_name, + AST_Field::vis_NA); + (void) DeclAsScope (connection)->fe_add_field (object_field); + object_id.destroy (); + + Identifier local_id ("Cookie"); + UTL_ScopedName local_name (&local_id, + 0); + Identifier module_id ("Components"); + UTL_ScopedName scoped_name (&module_id, + &local_name); + AST_Decl *d = c->lookup_by_name (&scoped_name, + I_TRUE); + local_id.destroy (); + module_id.destroy (); + + if (d == 0) + { + // This would happen if we haven't included Componennts.idl. + idl_global->err ()->lookup_error (&scoped_name); + return; + } + + AST_ValueType *cookie = AST_ValueType::narrow_from_decl (d); + + Identifier cookie_id ("ck"); + UTL_ScopedName cookie_name (&cookie_id, + 0); + AST_Field *cookie_field = + idl_global->gen ()->create_field (cookie, + &cookie_name, + AST_Field::vis_NA); + (void) DeclAsScope (connection)->fe_add_field (cookie_field); + cookie_id.destroy (); + + (void) c->fe_add_structure (connection); + + ACE_UINT64 bound = 0; + AST_Expression *bound_expr = + idl_global->gen ()->create_expr (bound, + AST_Expression::EV_ulong); + AST_Sequence *sequence = + idl_global->gen ()->create_sequence (bound_expr, + connection, + 0, + 0, + 0); + + ACE_CString seq_string (pd.id->get_string ()); + seq_string += "Connections"; + Identifier seq_id (seq_string.c_str ()); + UTL_ScopedName seq_name (&seq_id, + 0); + AST_Typedef *connections = + idl_global->gen ()->create_typedef (sequence, + &seq_name, + 0, + 0); + seq_id.destroy (); + + (void) c->fe_add_typedef (connections); } // Return 0 on success, -1 failure. The <errno> corresponding to the diff --git a/TAO/TAO_IDL/util/utl_scope.cpp b/TAO/TAO_IDL/util/utl_scope.cpp index 083cb626c64..b790d4070c7 100644 --- a/TAO/TAO_IDL/util/utl_scope.cpp +++ b/TAO/TAO_IDL/util/utl_scope.cpp @@ -1576,20 +1576,79 @@ UTL_Scope::lookup_primitive_type (AST_Expression::ExprType et) return 0; } -// Look through inherited list. Overridden in AST_Interface. +// Look through inherited interfaces. AST_Decl * -UTL_Scope::look_in_inherited (UTL_ScopedName *, - idl_bool ) +UTL_Scope::look_in_inherited (UTL_ScopedName *e, + idl_bool treat_as_ref) { - return 0; -} + AST_Decl *d = 0; + AST_Decl *d_before = 0; + AST_Interface *i = AST_Interface::narrow_from_scope (this); + AST_Interface **is = 0; + long nis = -1; -// Look through supported interface list. Overridden where necessary. -AST_Decl * -UTL_Scope::look_in_supported (UTL_ScopedName *, - idl_bool) -{ - return 0; + // This scope is not an interface. + if (i == 0) + { + return 0; + } + + // Can't look in an interface which was not yet defined. + if (!i->is_defined ()) + { + idl_global->err ()->fwd_decl_lookup (i, + e); + return 0; + } + + // OK, loop through inherited interfaces. + + // (Don't leave the inheritance hierarchy, no module or global ...) + // Find all and report ambiguous results as error. + + for (nis = i->n_inherits (), is = i->inherits (); nis > 0; nis--, is++) + { + d = (*is)->lookup_by_name (e, + treat_as_ref, + 0 /* not in parent */); + if (d != 0) + { + if (d_before == 0) + { + // First result found. + d_before = d; + } + else + { + // Conflict against further results? + if (d != d_before) + { + ACE_ERROR ((LM_ERROR, + "warning in %s line %d: ", + idl_global->filename ()->get_string (), + idl_global->lineno ())); + + e->dump (*ACE_DEFAULT_LOG_STREAM); + + ACE_ERROR ((LM_ERROR, + " is ambiguous in scope.\n" + "Found ")); + + d->name ()->dump (*ACE_DEFAULT_LOG_STREAM); + + ACE_ERROR ((LM_ERROR, + " and ")); + + d_before->name ()->dump (*ACE_DEFAULT_LOG_STREAM); + + ACE_ERROR ((LM_ERROR, + ".\n")); + } + } + } + } + + return d_before; } // Look up a String * in local scope only. @@ -1620,11 +1679,7 @@ UTL_Scope::lookup_by_name_local (Identifier *e, idl_bool in_corba = ACE_OS::strcmp (e->get_string (), "CORBA") == 0; - // Iterate over this scope. We need IK_both here for the legacy - // case where a recursive type is defined via an anonymous sequence. - // Looking up the anonymous sequence parameter succeeds only if - // references are included, since the decl for the (unfinished) - // enclosing type has not yet been added to the scope decls. + // Iterate over this scope. for (UTL_ScopeActiveIterator i (this, UTL_Scope::IK_both); !i.is_done (); i.next ()) @@ -1770,13 +1825,17 @@ UTL_Scope::lookup_by_name (UTL_ScopedName *e, if (d == 0) { - // A no-op unless d can inherit. - d = look_in_inherited (e, treat_as_ref); - - if (d == 0) + + // Special case for scope which is an interface or value type. + // We have to look in the inherited interfaces as well. + // Look before parent scopes. + if (pd_scope_node_type == AST_Decl::NT_interface + || pd_scope_node_type == AST_Decl::NT_valuetype + || pd_scope_node_type == AST_Decl::NT_component + || pd_scope_node_type == AST_Decl::NT_eventtype) { - // A no-op unless d can support interfaces. - d = look_in_supported (e, treat_as_ref); + d = look_in_inherited (e, + treat_as_ref); } if ((d == 0) && in_parent && idl_global->err_count () == 0) @@ -1847,6 +1906,7 @@ UTL_Scope::lookup_by_name (UTL_ScopedName *e, } // For the possible call to look_in_inherited() below. + AST_Decl::NodeType nt = d->node_type (); t = DeclAsScope (d); // OK, start of name is defined. Now loop doing local lookups @@ -1865,9 +1925,10 @@ UTL_Scope::lookup_by_name (UTL_ScopedName *e, // up was inherited into that interface. The first call to // look_in_inherited() is this function only checks base classes // of the scope (interface) we started the lookup from. - if (d == 0) + if (d == 0 && nt == AST_Decl::NT_interface) { - d = t->look_in_inherited (sn, treat_as_ref); + d = t->look_in_inherited (sn, + treat_as_ref); } // If treat_as_ref is true and d is not 0, add d to |