summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-08-02 02:04:07 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2004-08-02 02:04:07 +0000
commitaa96e45dc330b6572c308bb1956c2ee320e1d383 (patch)
tree78e0049007ad610de0098a7a14acafe5337ec37e
parentfff59355008a9d9b5224d896ba76040cbdb2b541 (diff)
downloadATCD-aa96e45dc330b6572c308bb1956c2ee320e1d383.tar.gz
ChangeLogTag: Sun Aug 1 20:57:32 2004 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog29
-rw-r--r--TAO/TAO_IDL/ast/ast_decl.cpp2
-rw-r--r--TAO/TAO_IDL/ast/ast_home.cpp2
-rw-r--r--TAO/TAO_IDL/ast/ast_root.cpp42
-rw-r--r--TAO/TAO_IDL/ast/ast_sequence.cpp13
-rw-r--r--TAO/TAO_IDL/be/be_init.cpp2
-rw-r--r--TAO/TAO_IDL/be_include/be_extern.h2
-rw-r--r--TAO/TAO_IDL/include/idl_defines.h6
-rw-r--r--TAO/TAO_IDL/include/idl_global.h13
-rw-r--r--TAO/TAO_IDL/include/utl_scope.h4
-rw-r--r--TAO/TAO_IDL/tao_idl.cpp12
-rw-r--r--TAO/TAO_IDL/util/utl_global.cpp61
-rw-r--r--TAO/TAO_IDL/util/utl_scope.cpp146
13 files changed, 311 insertions, 23 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 5dba5fc0346..6a4a642a55d 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,32 @@
+Sun Aug 1 20:57:32 2004 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/tao_idl.cpp:
+ * TAO_IDL/ast/ast_decl.cpp:
+ * TAO_IDL/ast/ast_home.cpp:
+ * TAO_IDL/ast/ast_root.cpp:
+ * TAO_IDL/ast/ast_sequence.cpp:
+ * TAO_IDL/be/be_init.cpp:
+ * TAO_IDL/be_include/be_extern.h:
+ * TAO_IDL/include/idl_defines.h:
+ * TAO_IDL/include/idl_global.h:
+ * TAO_IDL/include/utl_scope.h:
+ * TAO_IDL/util/utl_global.cpp:
+ * TAO_IDL/util/utl_scope.cpp:
+
+ - Fixed bugs in cleanup between iterations in processing the IDL
+ file list passed on the command line.
+
+ - Fixed bug in checking for recursive types.
+
+ - Fixed bug in eager calculation of the version segment of the
+ repository ID.
+
+ - Fixed bug in checking number of interfaces supported by a home.
+
+ - Added markers in existing bit vector to keep track of which
+ sequences of basic types have been referenced, and code to
+ update the markers.
+
Sun Aug 1 16:32:56 2004 J.T. Conklin <jtc@acorntoolworks.com>
* TAO_IDL/Makefile.am:
diff --git a/TAO/TAO_IDL/ast/ast_decl.cpp b/TAO/TAO_IDL/ast/ast_decl.cpp
index 3328e31ecac..dcc36e6cc99 100644
--- a/TAO/TAO_IDL/ast/ast_decl.cpp
+++ b/TAO/TAO_IDL/ast/ast_decl.cpp
@@ -469,7 +469,7 @@ AST_Decl::compute_repoID (void)
while (version == 0 && scope != 0)
{
AST_Decl *parent = ScopeAsDecl (scope);
- version = parent->version ();
+ version = parent->version_;
scope = parent->defined_in ();
}
diff --git a/TAO/TAO_IDL/ast/ast_home.cpp b/TAO/TAO_IDL/ast/ast_home.cpp
index bb9d7ae4b2a..c098ccb4763 100644
--- a/TAO/TAO_IDL/ast/ast_home.cpp
+++ b/TAO/TAO_IDL/ast/ast_home.cpp
@@ -75,7 +75,7 @@ AST_Home::supports (void) const
long
AST_Home::n_supports (void) const
{
- return this->pd_base_home ? this->n_inherits () - 1 : this->n_inherits ();
+ return this->n_inherits ();
}
AST_Component *
diff --git a/TAO/TAO_IDL/ast/ast_root.cpp b/TAO/TAO_IDL/ast/ast_root.cpp
index 16cc9dc66c0..1cd6826c64d 100644
--- a/TAO/TAO_IDL/ast/ast_root.cpp
+++ b/TAO/TAO_IDL/ast/ast_root.cpp
@@ -218,15 +218,19 @@ AST_Root::ast_accept (ast_visitor *visitor)
void
AST_Root::destroy ()
{
+ long i = 0;
+ long j = 0;
+
// Just destroy and delete the non-predefined types in the
// scope, in case we are processing multiple IDL files.
// Final cleanup will be done in fini().
- for (long i = this->pd_decls_used; i > 0; --i)
+ for (i = this->pd_decls_used; i > 0; --i)
{
AST_Decl *d = this->pd_decls[i - 1];
if (d->node_type () == AST_Decl::NT_pre_defined)
{
+ j = i;
break;
}
@@ -235,11 +239,47 @@ AST_Root::destroy ()
d = 0;
--this->pd_decls_used;
}
+
+ for (i = this->pd_referenced_used; i > j; --i)
+ {
+ AST_Decl *d = this->pd_referenced[i - 1];
+ d = 0;
+ --this->pd_referenced_used;
+ }
+
+ for (i = this->pd_name_referenced_used; i > j; --i)
+ {
+ Identifier *id = this->pd_name_referenced[i - 1];
+ id->destroy ();
+ id = 0;
+ --this->pd_name_referenced_used;
+ }
}
void
AST_Root::fini (void)
{
+ long i = 0;
+
+ for (i = this->pd_referenced_used; i > 0; --i)
+ {
+ AST_Decl *d = this->pd_referenced[i - 1];
+
+ if (d->node_type () == AST_Decl::NT_pre_defined)
+ {
+ break;
+ }
+
+ d = 0;
+ }
+
+ for (i = this->pd_name_referenced_used; i > 0; --i)
+ {
+ Identifier *id = this->pd_name_referenced[i - 1];
+ id->destroy ();
+ id = 0;
+ }
+
this->UTL_Scope::destroy ();
this->AST_Decl::destroy ();
}
diff --git a/TAO/TAO_IDL/ast/ast_sequence.cpp b/TAO/TAO_IDL/ast/ast_sequence.cpp
index 4271c098eff..71aa00cb23a 100644
--- a/TAO/TAO_IDL/ast/ast_sequence.cpp
+++ b/TAO/TAO_IDL/ast/ast_sequence.cpp
@@ -71,6 +71,7 @@ trademarks or registered trademarks of Sun Microsystems, Inc.
// of AST_Type).
#include "ast_sequence.h"
+#include "ast_typedef.h"
#include "ast_expression.h"
#include "ast_visitor.h"
#include "utl_identifier.h"
@@ -152,6 +153,18 @@ AST_Sequence::in_recursion (ACE_Unbounded_Queue<AST_Type *> &list)
ACE_TEXT ("bad base type\n")),
0);
}
+
+ if (type->node_type () == AST_Decl::NT_typedef)
+ {
+ AST_Typedef *td = AST_Typedef::narrow_from_decl (type);
+ type = td->primitive_base_type ();
+ AST_Decl::NodeType nt = type->node_type ();
+
+ if (nt != AST_Decl::NT_struct && nt != AST_Decl::NT_union)
+ {
+ return I_FALSE;
+ }
+ }
if (this->match_names (this, list))
{
diff --git a/TAO/TAO_IDL/be/be_init.cpp b/TAO/TAO_IDL/be/be_init.cpp
index a21432b0bb4..3cb9fac5979 100644
--- a/TAO/TAO_IDL/be/be_init.cpp
+++ b/TAO/TAO_IDL/be/be_init.cpp
@@ -22,7 +22,7 @@ BE_init (int &, char *[])
}
TAO_IDL_BE_Export void
-BE_post_init (void)
+BE_post_init (const char *[], long)
{
Identifier id ("void");
UTL_ScopedName n (&id,
diff --git a/TAO/TAO_IDL/be_include/be_extern.h b/TAO/TAO_IDL/be_include/be_extern.h
index b07afd30aab..9706ed03a7b 100644
--- a/TAO/TAO_IDL/be_include/be_extern.h
+++ b/TAO/TAO_IDL/be_include/be_extern.h
@@ -73,7 +73,7 @@ trademarks or registered trademarks of Sun Microsystems, Inc.
extern TAO_IDL_BE_Export BE_GlobalData *be_global;
extern TAO_IDL_BE_Export int BE_init (int &, char*[]);
-extern TAO_IDL_BE_Export void BE_post_init (void);
+extern TAO_IDL_BE_Export void BE_post_init (const char *[], long);
extern TAO_IDL_BE_Export void BE_version (void);
extern TAO_IDL_BE_Export void BE_produce (void);
extern TAO_IDL_BE_Export void BE_abort (void);
diff --git a/TAO/TAO_IDL/include/idl_defines.h b/TAO/TAO_IDL/include/idl_defines.h
index 6f86e74d154..e6395d1f3e2 100644
--- a/TAO/TAO_IDL/include/idl_defines.h
+++ b/TAO/TAO_IDL/include/idl_defines.h
@@ -87,4 +87,10 @@ trademarks or registered trademarks of Sun Microsystems, Inc.
#define NAMEBUFSIZE 1024
// Maximum length of static buffers used to store names.
+#define SUN_IDL_FE_VERSION "1.3.0"
+
+#if !defined (NFILES)
+# define NFILES 1024
+#endif /* ! NFILES */
+
#endif // _IDL_DEFINES_IDL_DEFINES_HH
diff --git a/TAO/TAO_IDL/include/idl_global.h b/TAO/TAO_IDL/include/idl_global.h
index 05dc5245a1c..39ac2a0cb32 100644
--- a/TAO/TAO_IDL/include/idl_global.h
+++ b/TAO/TAO_IDL/include/idl_global.h
@@ -305,6 +305,19 @@ public:
ACE_UINT64 string_seq_seen_;
ACE_UINT64 wstring_seq_seen_;
ACE_UINT64 octet_seq_seen_;
+ ACE_UINT64 boolean_seq_seen_;
+ ACE_UINT64 char_seq_seen_;
+ ACE_UINT64 wchar_seq_seen_;
+ ACE_UINT64 short_seq_seen_;
+ ACE_UINT64 ushort_seq_seen_;
+ ACE_UINT64 long_seq_seen_;
+ ACE_UINT64 ulong_seq_seen_;
+ ACE_UINT64 longlong_seq_seen_;
+ ACE_UINT64 ulonglong_seq_seen_;
+ ACE_UINT64 float_seq_seen_;
+ ACE_UINT64 double_seq_seen_;
+ ACE_UINT64 longdouble_seq_seen_;
+ ACE_UINT64 any_seq_seen_;
ACE_UINT64 basic_arg_seen_;
ACE_UINT64 bd_string_arg_seen_;
diff --git a/TAO/TAO_IDL/include/utl_scope.h b/TAO/TAO_IDL/include/utl_scope.h
index 7eb8bfae2f3..f8d4c067b00 100644
--- a/TAO/TAO_IDL/include/utl_scope.h
+++ b/TAO/TAO_IDL/include/utl_scope.h
@@ -309,6 +309,10 @@ protected:
// Checks for modules, or defns of forward declared struct or unions.
idl_bool redef_clash (AST_Decl::NodeType new_nt,
AST_Decl::NodeType scope_elem_nt);
+
+ void check_for_predef_seq (AST_Decl *d);
+ // Set the appropriate *_seen_ flag if we are seeing a spec-defined
+ // sequence of a basic type.
protected:
// Data.
diff --git a/TAO/TAO_IDL/tao_idl.cpp b/TAO/TAO_IDL/tao_idl.cpp
index b674e83b32b..dc5c105fc56 100644
--- a/TAO/TAO_IDL/tao_idl.cpp
+++ b/TAO/TAO_IDL/tao_idl.cpp
@@ -84,12 +84,6 @@ ACE_RCSID (TAO_IDL,
tao_idl,
"$Id$")
-#define SUN_IDL_FE_VERSION "1.3.0"
-
-#if !defined (NFILES)
-# define NFILES 1024
-#endif /* ! NFILES */
-
const char *DRV_files[NFILES];
long DRV_nfiles = 0;
long DRV_file_index = -1;
@@ -334,9 +328,8 @@ main (int argc, char *argv[])
// Initialize AST and load predefined types.
FE_populate ();
- // For the IDL compiler, this has to come after FE_populate().
- // For the IFR loader, it does nothing.
- BE_post_init ();
+ // Does various things in various backends.
+ BE_post_init (DRV_files, DRV_nfiles);
for (DRV_file_index = 0;
DRV_file_index < DRV_nfiles;
@@ -345,6 +338,7 @@ main (int argc, char *argv[])
DRV_drive (DRV_files[DRV_file_index]);
}
+ be_global->destroy ();
delete be_global;
be_global = 0;
diff --git a/TAO/TAO_IDL/util/utl_global.cpp b/TAO/TAO_IDL/util/utl_global.cpp
index 5aea4bb812b..2059501580e 100644
--- a/TAO/TAO_IDL/util/utl_global.cpp
+++ b/TAO/TAO_IDL/util/utl_global.cpp
@@ -124,6 +124,19 @@ IDL_GlobalData::dsf::dsf (void)
string_seq_seen_ (0),
wstring_seq_seen_ (0),
octet_seq_seen_ (0),
+ boolean_seq_seen_ (0),
+ char_seq_seen_ (0),
+ wchar_seq_seen_ (0),
+ short_seq_seen_ (0),
+ ushort_seq_seen_ (0),
+ long_seq_seen_ (0),
+ ulong_seq_seen_ (0),
+ longlong_seq_seen_ (0),
+ ulonglong_seq_seen_ (0),
+ float_seq_seen_ (0),
+ double_seq_seen_ (0),
+ longdouble_seq_seen_ (0),
+ any_seq_seen_ (0),
basic_arg_seen_ (0),
bd_string_arg_seen_ (0),
@@ -251,14 +264,28 @@ IDL_GlobalData::IDL_GlobalData (void)
ACE_SET_BITS (this->decls_seen_masks.valuefactory_seen_, cursor << 21);
ACE_SET_BITS (this->decls_seen_masks.valuebase_seen_, cursor << 22);
- ACE_SET_BITS (this->decls_seen_masks.seq_seen_, cursor << 37);
- ACE_SET_BITS (this->decls_seen_masks.iface_seq_seen_, cursor << 38);
- ACE_SET_BITS (this->decls_seen_masks.vt_seq_seen_, cursor << 39);
- ACE_SET_BITS (this->decls_seen_masks.array_seq_seen_, cursor << 40);
- ACE_SET_BITS (this->decls_seen_masks.pseudo_seq_seen_, cursor << 41);
- ACE_SET_BITS (this->decls_seen_masks.string_seq_seen_, cursor << 42);
- ACE_SET_BITS (this->decls_seen_masks.wstring_seq_seen_, cursor << 43);
- ACE_SET_BITS (this->decls_seen_masks.octet_seq_seen_, cursor << 44);
+ ACE_SET_BITS (this->decls_seen_masks.seq_seen_, cursor << 27);
+ ACE_SET_BITS (this->decls_seen_masks.iface_seq_seen_, cursor << 28);
+ ACE_SET_BITS (this->decls_seen_masks.vt_seq_seen_, cursor << 29);
+ ACE_SET_BITS (this->decls_seen_masks.array_seq_seen_, cursor << 30);
+ ACE_SET_BITS (this->decls_seen_masks.pseudo_seq_seen_, cursor << 31);
+ ACE_SET_BITS (this->decls_seen_masks.string_seq_seen_, cursor << 32);
+ ACE_SET_BITS (this->decls_seen_masks.wstring_seq_seen_, cursor << 33);
+ ACE_SET_BITS (this->decls_seen_masks.octet_seq_seen_, cursor << 34);
+ ACE_SET_BITS (this->decls_seen_masks.boolean_seq_seen_, cursor << 35);
+ ACE_SET_BITS (this->decls_seen_masks.char_seq_seen_, cursor << 36);
+ ACE_SET_BITS (this->decls_seen_masks.wchar_seq_seen_, cursor << 37);
+ ACE_SET_BITS (this->decls_seen_masks.short_seq_seen_, cursor << 38);
+ ACE_SET_BITS (this->decls_seen_masks.ushort_seq_seen_, cursor << 39);
+ ACE_SET_BITS (this->decls_seen_masks.octet_seq_seen_, cursor << 40);
+ ACE_SET_BITS (this->decls_seen_masks.long_seq_seen_, cursor << 41);
+ ACE_SET_BITS (this->decls_seen_masks.ulong_seq_seen_, cursor << 42);
+ ACE_SET_BITS (this->decls_seen_masks.longlong_seq_seen_, cursor << 43);
+ ACE_SET_BITS (this->decls_seen_masks.ulonglong_seq_seen_, cursor << 44);
+ ACE_SET_BITS (this->decls_seen_masks.float_seq_seen_, cursor << 45);
+ ACE_SET_BITS (this->decls_seen_masks.double_seq_seen_, cursor << 46);
+ ACE_SET_BITS (this->decls_seen_masks.longdouble_seq_seen_, cursor << 47);
+ ACE_SET_BITS (this->decls_seen_masks.any_seq_seen_, cursor << 48);
ACE_SET_BITS (this->decls_seen_masks.basic_arg_seen_, cursor << 52);
ACE_SET_BITS (this->decls_seen_masks.bd_string_arg_seen_, cursor << 53);
@@ -1035,6 +1062,24 @@ IDL_GlobalData::destroy (void)
delete [] trash;
trash = 0;
}
+
+ for (unsigned long j = 0; j < this->pd_n_include_file_names; ++j)
+ {
+ // Delete the contained char* but not the UTL_String -
+ // we can leave the slots allocated and clean up later.
+ this->pd_include_file_names[j]->destroy ();
+ this->pd_include_file_names[j] = 0;
+ }
+
+ this->pd_n_include_file_names = 0;
+
+ for (size_t k = 0; k < n_included_idl_files_; ++k)
+ {
+ // No memory allocated for these, so just set to 0.
+ this->included_idl_files_[k] = 0;
+ }
+
+ this->n_included_idl_files_ = 0;
this->pd_root->destroy ();
}
diff --git a/TAO/TAO_IDL/util/utl_scope.cpp b/TAO/TAO_IDL/util/utl_scope.cpp
index 5cbdaf1b21c..b790d4070c7 100644
--- a/TAO/TAO_IDL/util/utl_scope.cpp
+++ b/TAO/TAO_IDL/util/utl_scope.cpp
@@ -440,6 +440,147 @@ UTL_Scope::redef_clash (AST_Decl::NodeType new_nt,
}
}
+void
+UTL_Scope::check_for_predef_seq (AST_Decl *d)
+{
+ // Right now, we're interested only in predefined sequences
+ // referenced in the main IDL file. If we are processing
+ // multiple IDL files in one execution, the bits will
+ // stay set, and be accumulated as each file is parsed.
+ if (!idl_global->in_main_file ())
+ {
+ return;
+ }
+
+ AST_Type *bt = 0;
+ AST_Decl::NodeType nt = d->node_type ();
+
+ // We are interested only in members, arguments and typedefs.
+ switch (nt)
+ {
+ case AST_Decl::NT_field:
+ case AST_Decl::NT_union_branch:
+ case AST_Decl::NT_attr:
+ case AST_Decl::NT_argument:
+ bt = AST_Field::narrow_from_decl (d)->field_type ();
+ break;
+ case AST_Decl::NT_typedef:
+ bt = AST_Typedef::narrow_from_decl (d)->base_type ();
+ break;
+ default:
+ return;
+ }
+
+ // Check to eliminate more candidates.
+ if (!bt->imported () || bt->node_type () != AST_Decl::NT_typedef)
+ {
+ return;
+ }
+
+ bt = AST_Typedef::narrow_from_decl (bt)->base_type ();
+ nt = bt->node_type ();
+
+ // Must be a sequence with only one level of typedef.
+ if (nt != AST_Decl::NT_sequence)
+ {
+ return;
+ }
+
+ // Must be defined in the CORBA module.
+ AST_Decl *p = ScopeAsDecl (bt->defined_in ());
+ if (ACE_OS::strcmp (p->local_name ()->get_string (), "CORBA") != 0)
+ {
+ return;
+ }
+
+ // We know this narrowing will be successful.
+ bt = AST_Sequence::narrow_from_decl (bt)->base_type ();
+ nt = bt->node_type ();
+
+ // First check for string or wstring base type.
+ if (nt == AST_Decl::NT_string)
+ {
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.string_seq_seen_);
+ return;
+ }
+ else if (nt == AST_Decl::NT_wstring)
+ {
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.wstring_seq_seen_);
+ return;
+ }
+
+ // Now check for predefined base type.
+ AST_PredefinedType *pdt = AST_PredefinedType::narrow_from_decl (bt);
+ if (pdt == 0)
+ {
+ return;
+ }
+
+ switch (pdt->pt ())
+ {
+ case AST_PredefinedType::PT_long:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.long_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_ulong:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.ulong_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_longlong:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.longlong_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_ulonglong:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.ulonglong_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_short:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.short_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_ushort:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.ushort_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_float:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.float_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_double:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.double_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_longdouble:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.longdouble_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_char:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.char_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_wchar:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.wchar_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_boolean:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.boolean_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_octet:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.octet_seq_seen_);
+ break;
+ case AST_PredefinedType::PT_any:
+ ACE_SET_BITS (idl_global->decls_seen_info_,
+ idl_global->decls_seen_masks.any_seq_seen_);
+ break;
+ default:
+ break;
+ }
+}
+
// Public operations.
// Scope Management Protocol.
@@ -1851,6 +1992,9 @@ UTL_Scope::add_to_referenced (AST_Decl *e,
{
return;
}
+
+ // Sets the appropriate *_seen_ flag for future use.
+ this->check_for_predef_seq (e);
// Make sure there's space for one more decl.
if (this->pd_referenced_allocated == this->pd_referenced_used)
@@ -1933,7 +2077,7 @@ UTL_Scope::add_to_referenced (AST_Decl *e,
}
// Insert new identifier.
- this->pd_name_referenced[this->pd_name_referenced_used++] = id;
+ this->pd_name_referenced[this->pd_name_referenced_used++] = id->copy ();
}
}