diff options
Diffstat (limited to 'trunk/TAO/TAO_IDL/be/be_root.cpp')
-rw-r--r-- | trunk/TAO/TAO_IDL/be/be_root.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/trunk/TAO/TAO_IDL/be/be_root.cpp b/trunk/TAO/TAO_IDL/be/be_root.cpp new file mode 100644 index 00000000000..7ccffd91e03 --- /dev/null +++ b/trunk/TAO/TAO_IDL/be/be_root.cpp @@ -0,0 +1,126 @@ +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO IDL +// +// = FILENAME +// be_root.cpp +// +// = DESCRIPTION +// Extension of class AST_Root that provides additional means for C++ +// mapping. +// +// = AUTHOR +// Copyright 1994-1995 by Sun Microsystems, Inc. +// and +// Aniruddha Gokhale +// +// ============================================================================ + +#include "be_root.h" +#include "be_visitor.h" +#include "ast_sequence.h" +#include "ast_string.h" +#include "ast_array.h" + +ACE_RCSID (be, + be_root, + "$Id$") + +// Default Constructor. +be_root::be_root (void) + : COMMON_Base (), + AST_Decl (), + UTL_Scope (), + AST_Root (), + be_scope (), + be_decl () +{ +} + +// Constructor used to build the root of the abstract syntax tree (AST). +be_root::be_root (UTL_ScopedName *n) + : COMMON_Base (), + AST_Decl (AST_Decl::NT_root, + n), + UTL_Scope (AST_Decl::NT_root), + AST_Module (n), + AST_Root (n), + be_scope (AST_Decl::NT_root), + be_decl (AST_Decl::NT_root, + n) +{ +} + +be_root::~be_root (void) +{ +} + +// We had to provide these since the AST_Root::fe_* method was setting the +// names of these three to "local type". + +// Add this AST_Sequence to the locally defined types in this scope. +AST_Sequence * +be_root::fe_add_sequence (AST_Sequence *t) +{ + if (t == 0) + { + return 0; + } + + add_to_local_types (t); + return t; +} + +// Add this AST_String to the locally defined types in this scope +AST_String * +be_root::fe_add_string (AST_String *t) +{ + if (t == 0) + { + return 0; + } + + add_to_local_types (t); + return t; +} + +// Add this AST_Array to the locally defined types in this scope +AST_Array * +be_root::fe_add_array (AST_Array *t) +{ + if (t == 0) + { + return 0; + } + + add_to_local_types (t); + return t; +} + +void +be_root::destroy (void) +{ + // Call the destroy methods of our base classes. + +// The scope of the root is handled specially, since we may +// be processing multiple IDL files and we want to keep +// the predefined types around until we are all done. +// be_scope::destroy (); +// be_decl::destroy (); + + AST_Root::destroy (); +} + +int +be_root::accept (be_visitor *visitor) +{ + return visitor->visit_root (this); +} + +// Narrowing methods +IMPL_NARROW_METHODS3 (be_root, AST_Root, be_scope, be_decl) +IMPL_NARROW_FROM_DECL (be_root) +IMPL_NARROW_FROM_SCOPE (be_root) |