summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/fe/fe_interface_header.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/fe/fe_interface_header.cpp')
-rw-r--r--TAO/TAO_IDL/fe/fe_interface_header.cpp273
1 files changed, 72 insertions, 201 deletions
diff --git a/TAO/TAO_IDL/fe/fe_interface_header.cpp b/TAO/TAO_IDL/fe/fe_interface_header.cpp
index 1922b537a6f..e1b70fb99aa 100644
--- a/TAO/TAO_IDL/fe/fe_interface_header.cpp
+++ b/TAO/TAO_IDL/fe/fe_interface_header.cpp
@@ -53,8 +53,8 @@ Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
Sun, Sun Microsystems and the Sun logo are trademarks or registered
trademarks of Sun Microsystems, Inc.
-SunSoft, Inc.
-2550 Garcia Avenue
+SunSoft, Inc.
+2550 Garcia Avenue
Mountain View, California 94043
NOTE:
@@ -72,10 +72,10 @@ trademarks or registered trademarks of Sun Microsystems, Inc.
* AST_Interface node used to represent this interface is created.
*/
-#include "idl.h"
-#include "idl_extern.h"
+#include "idl.h"
+#include "idl_extern.h"
-#include "fe_private.h"
+#include "fe_private.h"
ACE_RCSID(fe, fe_interface_header, "$Id$")
@@ -83,13 +83,10 @@ ACE_RCSID(fe, fe_interface_header, "$Id$")
* Constructor(s) and destructor
*/
-FE_InterfaceHeader::FE_InterfaceHeader(UTL_ScopedName *n, UTL_NameList *nl,
- UTL_NameList *supports,
- idl_bool compile_now)
- : pd_interface_name(n)
+FE_InterfaceHeader::FE_InterfaceHeader(UTL_ScopedName *n, UTL_NameList *nl)
+ : pd_interface_name(n)
{
- if (compile_now)
- compile_inheritance (nl, supports);
+ compile_inheritance(nl);
}
/*
@@ -98,16 +95,16 @@ FE_InterfaceHeader::FE_InterfaceHeader(UTL_ScopedName *n, UTL_NameList *nl,
// Compute flattened, non-repeating list of inherited interfaces
-#undef INCREMENT
-#define INCREMENT 512
+#undef INCREMENT
+#define INCREMENT 512
/*
* Private storage used to store interfaces seen already in the
* computation of the unique, flattened inheritance list
*/
static AST_Interface **iseen = NULL;
-static long iallocated = 0;
-static long iused = 0;
+static long iallocated = 0;
+static long iused = 0;
/*
* Add an interface to an inheritance spec
@@ -115,8 +112,8 @@ static long iused = 0;
static void
add_inheritance(AST_Interface *i)
{
- long k;
- AST_Interface **oiseen;
+ long k;
+ AST_Interface **oiseen;
/*
* Make sure there's space for one more
@@ -130,7 +127,7 @@ add_inheritance(AST_Interface *i)
iallocated += INCREMENT;
iseen = new AST_Interface *[iallocated];
for (k = 0; k < iused; k++)
- iseen[k] = oiseen[k];
+ iseen[k] = oiseen[k];
delete oiseen;
}
}
@@ -147,7 +144,7 @@ add_inheritance(AST_Interface *i)
static long
already_seen(AST_Interface *ip)
{
- long i;
+ long i;
for (i = 0; i < iused; i++) {
if (iseen[i] == ip)
@@ -182,104 +179,71 @@ FE_InterfaceHeader::compile_one_inheritance(AST_Interface *i)
* Compute the list of top-level interfaces this one inherits from
*/
void
-FE_InterfaceHeader::compile_inheritance(UTL_NameList *ifaces,
- UTL_NameList *supports)
+FE_InterfaceHeader::compile_inheritance(UTL_NameList *nl)
{
- UTL_NamelistActiveIterator *l;
- AST_Decl *d;
- AST_Interface *i;
- long k;
- UTL_NameList *nl;
- int loops;
- long ichecked = 0;
- idl_bool inh_err = 0;
- idl_bool in_supports = 0;
+ UTL_NamelistActiveIterator *l = new UTL_NamelistActiveIterator(nl);
+ AST_Decl *d;
+ AST_Interface *i;
+ long k;
iused = 0;
/*
* Compute expanded flattened non-repeating list of interfaces
* which this one inherits from
*/
- nl = ifaces;
- // loop twice if nl and supports are nonempty
- for (loops = 0; loops < 2; ++loops) {
- if (nl != NULL) {
- l = new UTL_NamelistActiveIterator(nl);
- while (!(l->is_done())) {
- /*
- * Check that scope stack is valid
- */
- if (idl_global->scopes()->top() == NULL) {
- idl_global->err()->lookup_error(l->item());
- return;
- }
- /*
- * Look it up
- */
- d = idl_global->scopes()->top()->lookup_by_name(l->item(), I_TRUE);
- /*
- * Not found?
- */
- if (d == NULL) {
- idl_global->err()->lookup_error(l->item());
- return;
- }
- /*
- * Not an appropriate interface?
- */
- while(d->node_type() == AST_Decl::NT_typedef)
- d = AST_Typedef::narrow_from_decl(d)->base_type();
- if (d->node_type() == AST_Decl::NT_interface)
- i = AST_Interface::narrow_from_decl(d);
- else
- i = NULL;
- if (i != NULL)
- {
- if (in_supports)
- {
- inh_err = ! this->check_supports (i);
- }
- else
- {
- if (ichecked == 0)
- inh_err = ! this->check_first (i);
- else
- inh_err = ! this->check_further (i);
- }
- }
- else
- {
- inh_err = 1;
- }
- if (inh_err)
- {
- idl_global->err()->inheritance_error(pd_interface_name, d);
- return; //%! really ? inh_err=0; and test the remaining...?
- }
- /*
- * Forward declared interface?
- */
- if (!i->is_defined()) {
- idl_global->err()->inheritance_fwd_error(pd_interface_name, i);
- return;
- }
- /*
- * OK, see if we have to add this to the list of interfaces
- * inherited from
- */
- compile_one_inheritance(i);
-
- /*
- * Next element in header list
- */
- ++ ichecked;
- l->next();
- }
- delete l;
+ while (!(l->is_done())) {
+ /*
+ * Check that scope stack is valid
+ */
+ if (idl_global->scopes()->top() == NULL) {
+ idl_global->err()->lookup_error(l->item());
+ return;
}
- in_supports = 1;
- nl = supports;
+ /*
+ * Look it up
+ */
+ d = idl_global->scopes()->top()->lookup_by_name(l->item(), I_TRUE);
+ /*
+ * Not found?
+ */
+ if (d == NULL) {
+ idl_global->err()->lookup_error(l->item());
+ return;
+ }
+ /*
+ * Not an interface?
+ */
+ while(d->node_type() == AST_Decl::NT_typedef)
+ d = AST_Typedef::narrow_from_decl(d)->base_type();
+ if (d->node_type() != AST_Decl::NT_interface) {
+ idl_global->err()->inheritance_error(pd_interface_name, d);
+ return;
+ }
+ /*
+ * OK, cast to an interface
+ */
+ i = AST_Interface::narrow_from_decl(d);
+ if (i == NULL)
+ idl_global->err()->inheritance_error(pd_interface_name, d);
+ /*
+ * Forward declared interface?
+ */
+ if (!i->is_defined()) {
+ idl_global->err()->inheritance_fwd_error(pd_interface_name, i);
+ return;
+ }
+ /*
+ * OK, see if we have to add this to the list of interfaces
+ * inherited from
+ */
+ compile_one_inheritance(i);
+
+ /*
+ * Next element in header list
+ */
+ l->next();
}
+ delete l;
/*
* OK, install in interface header
*/
@@ -289,35 +253,6 @@ FE_InterfaceHeader::compile_inheritance(UTL_NameList *ifaces,
pd_n_inherits = iused;
}
-// check_ methods called from compile_inheritance()
-// overridden in derived classes
-idl_bool
-FE_InterfaceHeader::check_first (AST_Interface *i)
-{
- // nothing special for the first
- return this->check_further (i);
-}
-
-idl_bool
-FE_InterfaceHeader::check_further (AST_Interface *i)
-{
- if (i && ! i->is_valuetype())
- {
- return 1;
- }
- else
- {
- return 0;
- }
-}
-
-idl_bool
-FE_InterfaceHeader::check_supports (AST_Interface *i)
-{
- return 0;
-}
-
-
/*
* Public operations
*/
@@ -347,67 +282,3 @@ FE_InterfaceHeader::n_inherits()
{
return pd_n_inherits;
}
-
-
-// #ifdef IDL_HAS_VALUETYPE
-
-// FE_obv_header
-
-FE_obv_header::FE_obv_header (UTL_ScopedName *n, UTL_NameList *nl, UTL_NameList *supports)
- : FE_InterfaceHeader (n, nl, supports,0),
- truncatable_ (0),
- n_concrete_ (0)
-{
- compile_inheritance (nl, supports);
-}
-
-// check_ methods called from compile_inheritance()
-idl_bool
-FE_obv_header::check_first (AST_Interface *i)
-{
- if (i && i->is_valuetype())
- {
- if (! i->is_abstract_valuetype())
- ++ n_concrete_;
- return 1;
- }
- else
- {
- return 0;
- }
-}
-
-idl_bool
-FE_obv_header::check_further (AST_Interface *i)
-{
- if (i && i->is_valuetype() && i->is_abstract_valuetype())
- {
- return 1;
- }
- else
- {
- return 0;
- }
-}
-
-idl_bool
-FE_obv_header::check_supports (AST_Interface *i)
-{
- if (i && ! i->is_valuetype())
- {
- return 1;
- }
- else
- {
- return 0;
- }
-}
-
-
-long
-FE_obv_header::n_concrete ()
-{
- return n_concrete_;
-}
-
-// #endif /* IDL_HAS_VALUETYPE */