Index: bugfixes.xml
===================================================================
RCS file: /cvsroot/omniORBpy/bugfixes.xml,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.11
diff -u -r1.1.2.4 -r1.1.2.11
--- bugfixes.xml	2000/08/21 10:12:07	1.1.2.4
+++ bugfixes.xml	2000/09/21 13:20:15	1.1.2.11
@@ -8,4 +8,84 @@
 
 <buglist>
 
+<bug id="7" date="Thu Sep 21 14:14:30 BST 2000" user="dpg1">
+
+  <summary>Assertion failure mashalling sequence of any</summary>
+  <reported>Carsten Seibert</reported>
+  <link href="http://www.uk.research.att.com/omniORB/archives/2000-09/0109.html"/>
+</bug>
+
+<bug id="6" date="Thu Sep 21 11:53:11 BST 2000" user="dpg1">
+
+  <summary>Race condition in C++ servant deletion</summary>
+  <reported>Gary Pennington</reported>
+  <link	href="http://www.uk.research.att.com/omniORB/archives/2000-09/0063.html"/>
+  <text>
+  A race condition in reference counting meant that a thread would
+  occasionally attempt to use a C++ servant object while another
+  thread was in the process of deleting it.
+  </text>
+</bug>
+
+<bug id="5" date="Wed Sep  6 12:13:30 BST 2000" user="dpg1">
+
+  <summary>Support for Python 1.6 and 2.0b1</summary>
+  <text>
+  omniORBpy was hard-coded to require Python 1.5.2, just in case later
+  versions were incompatible. 1.6 and 2.0b1 are compatible, so they
+  are now supported.
+  </text>
+</bug>
+
+<bug id="4" date="Fri Sep  1 15:07:45 BST 2000" user="dpg1">
+
+  <summary>Memory leak when returning invalid data</summary>
+  <text>
+  If the data returned from a CORBA call was invalid, causing a
+  BAD_PARAM (or other) exception, the invalid data would be leaked.
+  </text>
+</bug>
+
+<bug id="3" date="Wed Aug 23 10:15:43 BST 2000" user="dpg1">
+
+  <summary>Interface Repository stubs not available with "import
+  CORBA"</summary>
+  <reported>Richard Gruet</reported>
+  <text>
+  The <code>OMNIORBPY_IMPORT_IR_STUBS</code> environment variable
+  worked with "<code>from omniORB import CORBA</code>", but not
+  "<code>import CORBA</code>".
+  </text>
+</bug>
+
+<bug id="2" date="Tue Aug 22 17:01:50 BST 2000" user="dpg1">
+
+  <summary>Instability after unexpected user exceptions</summary>
+  <text>
+  After the fix on 17 August (see the update.log), when an unexpected
+  user exception was raised in an up-call, the Python error status
+  would not be properly cleared. This meant that later up-calls could
+  fail with exceptions of the form "AttributeError: minor", even when
+  the code didn't mention "minor" at all.
+  </text>
+
+</bug>
+
+
+<bug id="1" date="Tue Aug 22 12:44:57 BST 2000" user="dpg1">
+
+  <summary>omniidl back-end generates useless classes for typedef to
+  struct/union</summary>
+
+  <reported>Jimmy Wilson</reported>
+  <link href="http://www.uk.research.att.com/omniORB/archives/2000-08/0172.html"/>
+  <text>
+  The Python mapping specification is totally silent on the issue of
+  typedefs. The only thing it says is that <em>something</em> must be
+  generated for all declared types, to be passed to
+  <code>CORBA.id()</code>. It does make sense to allow typedef names
+  to be used to contruct structs and unions, though.
+  </text>
+</bug>
+
 </buglist>
Index: bugfixes.xsl
===================================================================
RCS file: /cvsroot/omniORBpy/bugfixes.xsl,v
retrieving revision 1.1.2.3
retrieving revision 1.1.2.5
diff -u -r1.1.2.3 -r1.1.2.5
--- bugfixes.xsl	2000/08/21 10:12:07	1.1.2.3
+++ bugfixes.xsl	2000/09/11 14:15:44	1.1.2.5
@@ -10,7 +10,7 @@
   <html>
   <head>
   <title>omniORBpy bugs</title>
-  <link REL="stylesheet" HREF="../styles.css" TYPE="text/css"/>
+  <link REL="stylesheet" HREF="../../styles.css" TYPE="text/css"/>
   </head>
   <body background="../images/sidebarbg.gif">
 
@@ -125,12 +125,13 @@
 
 <xsl:template match="bug">
 
-    <a><xsl:attribute name="name">bug<xsl:value-of select="@id"/>
-       </xsl:attribute>
-    </a>
     <tr><td>Summary:</td>
         <td><b><xsl:value-of select="summary"/></b>
-            (bug number <xsl:value-of select="@id"/>)</td>
+            (bug number <xsl:value-of select="@id"/>)
+            <a><xsl:attribute name="name">bug<xsl:value-of select="@id"/>
+               </xsl:attribute>
+            </a>
+        </td>
     </tr>
 
     <tr><td>Date:      </td><td><xsl:value-of select="@date"/></td></tr>
Index: update.log
===================================================================
RCS file: /cvsroot/omniORBpy/update.log,v
retrieving revision 1.28.2.13
retrieving revision 1.28.2.33
diff -u -r1.28.2.13 -r1.28.2.33
--- update.log	2000/08/21 10:12:08	1.28.2.13
+++ update.log	2000/09/28 09:23:10	1.28.2.33
@@ -1,3 +1,212 @@
+Thu Sep 28 10:21:51 BST 2000 dpg1
+=================================
+
+- Last update broke Windows build
+
+modules/dir.mk
+
+Wed Sep 27 16:49:41 BST 2000 dpg1
+=================================
+
+- #include<python1.5/pythread.h> generalised for other Python versions
+
+modules/dir.mk
+modules/common/pyThreadCache.h
+
+
+Tue Sep 26 14:18:34 BST 2000 dpg1
+=================================
+
+- Missed some omniidl updates from omniORB 3
+
+omniidl/cxx/idlutil.cc
+
+
+Thu Sep 21 14:14:30 BST 2000 dpg1
+=================================
+
+- Silly bug marshalling sequences of anys and TypeCodes
+
+modules/common/pyMarshal.cc
+
+
+Thu Sep 21 11:53:11 BST 2000 dpg1
+=================================
+
+- Fix race condition in Py_omniServant deletion.
+
+modules/omni30/omnipy30.h
+modules/omni30/pyPOAFunc.cc
+modules/omni30/pyServant.cc
+
+
+Tue Sep 19 12:24:15 BST 2000 dpg1
+=================================
+
+- Minor documentation updates: new INS spec, omniidl -T,
+  OMNIORB_PRINCIPAL.
+
+doc/tex/omniORBpy.bib
+doc/tex/omniORBpy.tex
+external_merge/doc/omniORBpy.pdf
+external_merge/doc/omniORBpy.ps
+external_merge/doc/omniORBpy/index.html
+external_merge/doc/omniORBpy/omniORBpy001.html
+external_merge/doc/omniORBpy/omniORBpy002.html
+external_merge/doc/omniORBpy/omniORBpy003.html
+external_merge/doc/omniORBpy/omniORBpy004.html
+external_merge/doc/omniORBpy/omniORBpy005.html
+external_merge/doc/omniORBpy/omniORBpy006.html
+external_merge/doc/omniORBpy/omniORBpy007.html
+external_merge/doc/omniORBpy/omniORBpy009.html
+
+
+Tue Sep 19 10:22:39 BST 2000 dpg1
+=================================
+
+- More paranoid about clearing Python error status
+
+modules/common/pyomniFunc.cc
+modules/omni30/pyServant.cc
+
+- Rename Scope::Entry::Kind to Scope::Entry::EntryKind to avoid
+  compiler bugs.
+
+omniidl/cxx/idlscope.cc
+omniidl/cxx/idlscope.h
+
+
+Mon Sep 11 15:12:38 BST 2000 dpg1
+=================================
+
+- Fix name tags in bugfixes stylesheet
+
+bugfixes.xsl
+
+- New -T flag to omniidl, to use a temporary file instead of a pipe
+  between omnicpp and omniidl. This works-around the bug seen of some
+  Win98 machines.
+
+omniidl/python/omniidl/main.py
+
+
+Thu Sep  7 17:20:37 BST 2000 dpg1
+=================================
+
+- Yesterday's Python 1.6+ update broke on Windows.
+
+modules/dir.mk
+omniidl/cxx/dir.mk
+
+
+Wed Sep  6 12:13:30 BST 2000 dpg1
+=================================
+
+- Minor changes to support Python versions above 1.5.2
+
+external_merge/README.Python -- new 
+modules/dir.mk
+modules/omni28/omnipy28.h
+modules/omni30/omnipy30.h
+omniidl/cxx/dir.mk
+omniidl/cxx/idlpython.cc
+omniidl/python/omniidl/main.py
+omniidl/python/scripts/omniidlrun.py
+
+
+Fri Sep  1 15:07:45 BST 2000 dpg1
+=================================
+
+- Memory leak when returning invalid data (bug 4)
+
+modules/omni28/pyServant.cc
+modules/omni30/pyServant.cc
+
+
+Wed Aug 30 19:10:01 BST 2000 dpg1
+=================================
+
+- Register operation declarations so they can be found with
+  findDecl().
+
+omniidl/cxx/idlpython.cc
+
+
+Tue Aug 29 16:17:38 BST 2000 dpg1
+=================================
+
+- New relativeScope() function.
+- New -i flag to enter interactive loop after parsing
+
+omniidl/cxx/idlpython.cc
+omniidl/cxx/idlscope.cc
+omniidl/cxx/idlscope.h
+omniidl/python/omniidl/idlutil.py
+omniidl/python/omniidl/main.py
+
+
+Tue Aug 29 11:17:26 BST 2000 dpg1
+=================================
+
+- In omniidl, operations and attributes now have repository ids.
+
+omniidl/cxx/idlast.cc
+omniidl/cxx/idlast.h
+omniidl/cxx/idldump.cc
+omniidl/cxx/idlpython.cc
+omniidl/cxx/idlrepoId.cc
+omniidl/cxx/lex.yy.cc
+omniidl/cxx/y.tab.cc
+omniidl/python/omniidl/idlast.py
+
+
+Fri Aug 25 14:25:20 BST 2000 dpg1
+=================================
+
+- Multiple comments preceding a declaration are now properly attached
+  on all platforms
+
+omniidl/cxx/idlast.cc
+
+
+Thu Aug 24 12:26:28 BST 2000 dpg1
+=================================
+
+- Typo in error message % format string
+
+omniidl/cxx/idlscope.cc
+
+
+Wed Aug 23 10:15:43 BST 2000 dpg1
+=================================
+
+- Fix loading of IfR stubs when doing "import CORBA" rather than "from
+  omniORB import CORBA".
+
+python/omniORB/__init__.py
+
+- Bugs list referred to a non-existent styles.css
+
+bugfixes.xsl
+
+
+Tue Aug 22 17:01:50 BST 2000 dpg1
+=================================
+
+- Properly clear Python error status after unexpected user exception
+
+modules/common/pyExceptions.cc
+
+
+Tue Aug 22 12:44:57 BST 2000 dpg1
+=================================
+
+- Generate inherited classes for typedefs to struct and unions
+- Cope better with nasty symbols in IDL file names
+
+omniidl_be/python.py
+
+
 Mon Aug 21 11:08:38 BST 2000 dpg1
 =================================
 
Index: doc/omniORBpy/index.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/index.html,v
retrieving revision 1.2.2.2
retrieving revision 1.2.2.3
diff -u -r1.2.2.2 -r1.2.2.3
--- doc/omniORBpy/index.html	2000/08/21 09:49:55	1.2.2.2
+++ doc/omniORBpy/index.html	2000/09/19 11:28:09	1.2.2.3
@@ -82,17 +82,18 @@
 <LI><A HREF="omniORBpy006.html#toc27"> Object table size</A>
 <LI><A HREF="omniORBpy006.html#toc28"> Obsolete Initial Object Reference Bootstrapping</A>
 <LI><A HREF="omniORBpy006.html#toc29"> GIOP Lowest Common Denominator Mode</A>
-<LI><A HREF="omniORBpy006.html#toc30"> System Exception Handlers</A>
-<LI><A HREF="omniORBpy006.html#toc31"> Location forwarding</A>
-<LI><A HREF="omniORBpy006.html#toc32"> Dynamic importing of IDL</A>
+<LI><A HREF="omniORBpy006.html#toc30"> GIOP Requesting Principal field</A>
+<LI><A HREF="omniORBpy006.html#toc31"> System Exception Handlers</A>
+<LI><A HREF="omniORBpy006.html#toc32"> Location forwarding</A>
+<LI><A HREF="omniORBpy006.html#toc33"> Dynamic importing of IDL</A>
 </UL>
 <LI><A HREF="omniORBpy007.html"> Connection Management</A>
 <UL>
-<LI><A HREF="omniORBpy007.html#toc33"> Background</A>
-<LI><A HREF="omniORBpy007.html#toc34"> The Model</A>
-<LI><A HREF="omniORBpy007.html#toc35"> Idle Connection Shutdown and Remote Call Timeout</A>
-<LI><A HREF="omniORBpy007.html#toc36"> Interoperability Considerations</A>
-<LI><A HREF="omniORBpy007.html#toc37"> Connection Acceptance</A>
+<LI><A HREF="omniORBpy007.html#toc34"> Background</A>
+<LI><A HREF="omniORBpy007.html#toc35"> The Model</A>
+<LI><A HREF="omniORBpy007.html#toc36"> Idle Connection Shutdown and Remote Call Timeout</A>
+<LI><A HREF="omniORBpy007.html#toc37"> Interoperability Considerations</A>
+<LI><A HREF="omniORBpy007.html#toc38"> Connection Acceptance</A>
 </UL>
 <LI><A HREF="omniORBpy008.html"> hosts_access(5)</A>
 <LI><A HREF="omniORBpy009.html"> References</A>
Index: doc/omniORBpy/omniORBpy001.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/omniORBpy001.html,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- doc/omniORBpy/omniORBpy001.html	2000/07/12 14:31:02	1.2
+++ doc/omniORBpy/omniORBpy001.html	2000/09/19 11:28:09	1.2.2.1
@@ -15,7 +15,7 @@
 
 <H1>Chapter&nbsp;1&nbsp;&nbsp; Introduction</H1>
 omniORBpy is an Object Request Broker (ORB) that implements the CORBA
-2.3 Python mapping&nbsp;[<A HREF="omniORBpy009.html#pythonmapping"><CITE>OMG00</CITE></A>]. It is designed for use with
+2.3 Python mapping&nbsp;[<A HREF="omniORBpy009.html#pythonmapping"><CITE>OMG00b</CITE></A>]. It is designed for use with
 omniORB 3, but it can also be used with omniORB 2.8. If you use
 omniORB 3.0, the full POA functionality is available; with omniORB 2.8
 many POA functions are not supported.<BR>
@@ -107,7 +107,9 @@
 omniORB tree.)<BR>
 <BR>
 You should also add the <TT>bin/</TT><TT>$</TT><TT>FARCH</TT> directory
-to your <TT>PATH</TT>, so you can run the IDL compiler, omniidl.<BR>
+to your <TT>PATH</TT>, so you can run the IDL compiler, omniidl.
+Finally, add the <TT>lib/</TT><TT>$</TT><TT>FARCH</TT> directory to
+<TT>LD_LIBRARY_PATH</TT>, so the omniORB core library can be found.<BR>
 <BR>
 
 <H3>1.2.2&nbsp;&nbsp; Configuration file</H3><UL>
Index: doc/omniORBpy/omniORBpy002.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/omniORBpy002.html,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- doc/omniORBpy/omniORBpy002.html	2000/08/18 11:40:56	1.2.2.1
+++ doc/omniORBpy/omniORBpy002.html	2000/09/19 11:28:09	1.2.2.2
@@ -43,7 +43,7 @@
 <TT>Example</TT>. The reason for this will become clear in a moment.<BR>
 <BR>
 If you are new to IDL, you can learn about its syntax in Chapter 3 of
-the CORBA specification 2.3&nbsp;[<A HREF="omniORBpy009.html#corba23-spec"><CITE>OMG99a</CITE></A>]. For the moment, you
+the CORBA specification 2.3&nbsp;[<A HREF="omniORBpy009.html#corba23-spec"><CITE>OMG99</CITE></A>]. For the moment, you
 only need to know that the interface consists of a single operation,
 <TT>echoString()</TT>, which takes a string as an argument and returns a
 copy of the same string.<BR>
@@ -58,7 +58,7 @@
 Python stubs for that IDL. The stubs contain Python declarations for
 all the interfaces and types declared in the IDL, as required by the
 Python mapping. It is possible to generate stubs dynamically at
-run-time, as described in section&nbsp;<A HREF="omniORBpy006.html#sec:importIDL">6.11</A>, but it is more
+run-time, as described in section&nbsp;<A HREF="omniORBpy006.html#sec:importIDL">6.12</A>, but it is more
 efficient to generate them statically.<BR>
 <BR>
 To generate the stubs, we use a command line like<BR>
@@ -177,7 +177,7 @@
 <BR>
 A POA's behaviour is governed by its <I>policies</I>. The Root POA has
 suitable policies for many simple servers. Chapter 11 of the CORBA 2.3
-specification [<A HREF="omniORBpy009.html#corba23-spec"><CITE>OMG99a</CITE></A>] has details of all the POA policies
+specification [<A HREF="omniORBpy009.html#corba23-spec"><CITE>OMG99</CITE></A>] has details of all the POA policies
 which are available.<BR>
 <BR>
 When omniORBpy is used with omniORB 2.8, <EM>only</EM> the Root POA is
@@ -346,7 +346,7 @@
 <TT>CORBA.COMM_FAILURE</TT>, <TT>CORBA.OBJECT_NOT_EXIST</TT>, and
 <TT>CORBA.TRANSIENT</TT>.<BR>
 <BR>
-Section&nbsp;<A HREF="omniORBpy006.html#sec:exHandlers">6.9</A> describes how exception handlers can be
+Section&nbsp;<A HREF="omniORBpy006.html#sec:exHandlers">6.10</A> describes how exception handlers can be
 installed for all the various system exceptions, to avoid surrounding
 all code with <TT>try</TT>...<TT>except</TT> blocks.<BR>
 <BR>
@@ -591,7 +591,7 @@
 with id and kind fields which contain `.' and `/' characters. See
 chapter&nbsp;<A HREF="omniORBpy004.html#chap:ins">4</A> of this manual, and chapter 3 of the CORBA
 services specification, as updated for the Interoperable Naming
-Service&nbsp;[<A HREF="omniORBpy009.html#inschapters"><CITE>OMG99b</CITE></A>].
+Service&nbsp;[<A HREF="omniORBpy009.html#inschapters"><CITE>OMG00a</CITE></A>].
 
 <DT><A NAME="note8" HREF="#text8"><FONT SIZE=5>5</FONT></A><DD> If you are on-the-ball, you
 will have noticed that we didn't call <TT>_narrow()</TT> when resolving the
Index: doc/omniORBpy/omniORBpy003.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/omniORBpy003.html,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- doc/omniORBpy/omniORBpy003.html	2000/08/18 11:40:57	1.2.2.1
+++ doc/omniORBpy/omniORBpy003.html	2000/09/19 11:28:09	1.2.2.2
@@ -15,7 +15,7 @@
 <HR>
 
 <H1>Chapter&nbsp;3&nbsp;&nbsp; Python language mapping issues</H1>
-omniORBpy adheres to the standard Python mapping&nbsp;[<A HREF="omniORBpy009.html#pythonmapping"><CITE>OMG00</CITE></A>],
+omniORBpy adheres to the standard Python mapping&nbsp;[<A HREF="omniORBpy009.html#pythonmapping"><CITE>OMG00b</CITE></A>],
 so there is no need to describe the mapping here. This chapter
 outlines a number of issues which are not addressed by the standard
 (or are optional), and how they are resolved in omniORBpy.<BR>
@@ -185,7 +185,7 @@
 <BR>
 The equivalent of DynAny creation can be achieved by dynamically
 writing and importing new IDL, as described in
-section&nbsp;<A HREF="omniORBpy006.html#sec:importIDL">6.11</A>.<BR>
+section&nbsp;<A HREF="omniORBpy006.html#sec:importIDL">6.12</A>.<BR>
 <BR>
 There is, however, a minor fly in the ointment when it comes to
 receiving Anys. When an Any is transmitted, it is sent as a TypeCode
@@ -328,7 +328,7 @@
 <BR>
 
 <LI> Exception handlers (described later in
-section&nbsp;<A HREF="omniORBpy006.html#sec:exHandlers">6.9</A>) are not executed when local objects
+section&nbsp;<A HREF="omniORBpy006.html#sec:exHandlers">6.10</A>) are not executed when local objects
 raise system exceptions. Exceptions are always propagated to the
 caller.</UL>In all of these cases, omniORB 3 properly preserves local/remote
 transparency.<BR>
Index: doc/omniORBpy/omniORBpy004.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/omniORBpy004.html,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- doc/omniORBpy/omniORBpy004.html	2000/07/12 14:31:02	1.2
+++ doc/omniORBpy/omniORBpy004.html	2000/09/19 11:28:09	1.2.2.1
@@ -17,7 +17,7 @@
 <H1>Chapter&nbsp;4&nbsp;&nbsp; Interoperable Naming Service</H1>
 <A NAME="chap:ins"></A>omniORB 3 supports the Interoperable Naming Service (INS), which will
 be part of CORBA 2.4. The following is a summary of the new facilities
-described in the INS edited chapters document&nbsp;[<A HREF="omniORBpy009.html#inschapters"><CITE>OMG99b</CITE></A>].
+described in the INS edited chapters document&nbsp;[<A HREF="omniORBpy009.html#inschapters"><CITE>OMG00a</CITE></A>].
 These facilities are not available when using omniORBpy with omniORB
 2.8.<BR>
 <BR>
@@ -369,7 +369,7 @@
 <BR>
 <HR WIDTH="50%" SIZE=1><DL>
 <DT><A NAME="note13" HREF="#text13"><FONT SIZE=5>1</FONT></A><DD> Not 2089 as
-printed in [<A HREF="omniORBpy009.html#inschapters"><CITE>OMG99b</CITE></A>]!
+printed in [<A HREF="omniORBpy009.html#inschapters"><CITE>OMG00a</CITE></A>]!
 
 <DT><A NAME="note14" HREF="#text14"><FONT SIZE=5>2</FONT></A><DD> In
 fact, a strict reading of the specification says that it should be
Index: doc/omniORBpy/omniORBpy005.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/omniORBpy005.html,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- doc/omniORBpy/omniORBpy005.html	2000/08/18 11:40:57	1.2.2.1
+++ doc/omniORBpy/omniORBpy005.html	2000/09/19 11:28:09	1.2.2.2
@@ -49,6 +49,9 @@
 <TR><TD ALIGN=left NOWRAP><TT>-N</TT></TD>
 <TD ALIGN=left NOWRAP>Do not run the preprocessor.</TD>
 </TR>
+<TR><TD ALIGN=left NOWRAP><TT>-T</TT></TD>
+<TD ALIGN=left NOWRAP>Use a temporary file, not a pipe, for preprocessor output.</TD>
+</TR>
 <TR><TD ALIGN=left NOWRAP><TT>-Wp</TT><I>arg</I>[,<I>arg</I>...]</TD>
 <TD ALIGN=left NOWRAP>Send arguments to the preprocessor.</TD>
 </TR>
@@ -101,6 +104,15 @@
 omniidl.<BR>
 <BR>
 
+<H4> Windows 9x</H4>The output from the C preprocessor is normally fed to the omniidl
+parser through a pipe. On some Windows 98 machines (but not all!) the
+pipe does not work, and the preprocessor output is echoed to the
+screen. When this happens, the omniidl parser sees an empty file, and
+produces useless stub files with strange long names. To avoid the
+problem, use the `<TT>-T</TT>' option to create a temporary file
+between the two stages.<BR>
+<BR>
+
 <H3>5.1.2&nbsp;&nbsp; Forward-declared interfaces</H3>If you have an IDL file like:<BR>
 <BR>
 <PRE>
@@ -173,7 +185,7 @@
 </TR></TABLE><BR>
 The <TT>-Wbstdout</TT> option is not really useful if you are
 invoking omniidl yourself. It is used by <TT>omniORB.importIDL()</TT>,
-described in section&nbsp;<A HREF="omniORBpy006.html#sec:importIDL">6.11</A>.<BR>
+described in section&nbsp;<A HREF="omniORBpy006.html#sec:importIDL">6.12</A>.<BR>
 <BR>
 When you compile an IDL file which #includes other IDL files, omniidl
 normally only generates code for the main file, assuming that code for
Index: doc/omniORBpy/omniORBpy006.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/omniORBpy006.html,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- doc/omniORBpy/omniORBpy006.html	2000/08/18 11:40:57	1.2.2.1
+++ doc/omniORBpy/omniORBpy006.html	2000/09/19 11:28:09	1.2.2.2
@@ -331,7 +331,18 @@
 interoperability.<BR>
 <BR>
 <A NAME="toc30"></A>
-<H2>6.9&nbsp;&nbsp; System Exception Handlers</H2>
+<H2>6.9&nbsp;&nbsp; GIOP Requesting Principal field</H2>In versions 1.0 and 1.1 of the GIOP specification, request messages
+contain a `principal' field which was intended to identify the client.
+The meaning of the principal field was never specified, and its use is
+now deprecated. The field is not present in GIOP 1.2. omniORB normally
+uses the string `<TT>nobody</TT>' in the principal field. However,
+some systems (e.g. the GNOME desktop environment) use the principal
+field as an authentication mechanism, so omniORB allows you to
+configure the principal by setting the <TT>OMNIORB_PRINCIPAL</TT>
+environment variable.<BR>
+<BR>
+<A NAME="toc31"></A>
+<H2>6.10&nbsp;&nbsp; System Exception Handlers</H2>
 <A NAME="sec:exHandlers"></A>By default, all system exceptions which are raised during an operation
 invocation, with the exception of <TT>CORBA.TRANSIENT</TT>, are
 propagated to the application code. Some applications may prefer to
@@ -353,7 +364,7 @@
 in the address space.<BR>
 <BR>
 
-<H3>6.9.1&nbsp;&nbsp; CORBA.TRANSIENT handlers</H3>When a <TT>CORBA.TRANSIENT</TT> exception is raised by the ORB runtime,
+<H3>6.10.1&nbsp;&nbsp; CORBA.TRANSIENT handlers</H3>When a <TT>CORBA.TRANSIENT</TT> exception is raised by the ORB runtime,
 the default behaviour of the proxy objects is to retry indefinitely
 until the operation succeeds, with an exponentially increasing delay
 (up to a limit) between retries.<BR>
@@ -397,7 +408,7 @@
 the TRANSIENT exception is raised in the application.<BR>
 <BR>
 
-<H3>6.9.2&nbsp;&nbsp; CORBA.COMM_FAILURE and CORBA.SystemException</H3>There are two other functions for registering exception handlers: one
+<H3>6.10.2&nbsp;&nbsp; CORBA.COMM_FAILURE and CORBA.SystemException</H3>There are two other functions for registering exception handlers: one
 for <TT>CORBA.COMM_FAILURE</TT>, and one for all other
 exceptions. For both these cases, the default is for there to be no
 handler, so exceptions are propagated to the application.<BR>
@@ -408,8 +419,8 @@
 </PRE>In both cases, the call-back function has the same signature
 as for <TT>TRANSIENT</TT> handlers.<BR>
 <BR>
-<A NAME="toc31"></A>
-<H2>6.10&nbsp;&nbsp; Location forwarding</H2>
+<A NAME="toc32"></A>
+<H2>6.11&nbsp;&nbsp; Location forwarding</H2>
 <A NAME="sec:locationForward"></A>Any CORBA operation invocation can return a <TT>LOCATION_FORWARD</TT>
 message to the caller, indicating that it should retry the invocation
 on a new object reference. The standard allows ServantManagers to
@@ -422,8 +433,8 @@
 implementation. <TT>omniORB.LOCATION_FORWARD</TT> is not supported on
 omniORB 2.8.0.<BR>
 <BR>
-<A NAME="toc32"></A>
-<H2>6.11&nbsp;&nbsp; Dynamic importing of IDL</H2>
+<A NAME="toc33"></A>
+<H2>6.12&nbsp;&nbsp; Dynamic importing of IDL</H2>
 <A NAME="sec:importIDL"></A>omniORBpy is usually used with pre-generated stubs. Since Python is a
 dynamic language, however, it is possible to compile and import new
 stubs at run-time.<BR>
Index: doc/omniORBpy/omniORBpy007.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/omniORBpy007.html,v
retrieving revision 1.2.2.1
retrieving revision 1.2.2.2
diff -u -r1.2.2.1 -r1.2.2.2
--- doc/omniORBpy/omniORBpy007.html	2000/08/18 11:40:57	1.2.2.1
+++ doc/omniORBpy/omniORBpy007.html	2000/09/19 11:28:10	1.2.2.2
@@ -17,7 +17,7 @@
 <H1>Chapter&nbsp;7&nbsp;&nbsp; Connection Management</H1>
 <A NAME="ch_conn"></A>This chapter describes how omniORB manages network connections.<BR>
 <BR>
-<A NAME="toc33"></A>
+<A NAME="toc34"></A>
 <H2>7.1&nbsp;&nbsp; Background</H2>In CORBA, the ORB is the `middleware' that allows a client to invoke
 an operation on an object without regard to its implementation or
 location. In order to invoke an operation on an object, a client needs
@@ -49,7 +49,7 @@
 connections and the programming interface to fine tune the management
 policy.<BR>
 <BR>
-<A NAME="toc34"></A>
+<A NAME="toc35"></A>
 <H2>7.2&nbsp;&nbsp; The Model</H2>omniORB is designed from the ground up to be fully multi-threaded. The
 objective is to maximise the degree of concurrency and at the same
 time eliminate any unnecessary thread overhead. Another objective is
@@ -88,7 +88,7 @@
 value can be increased to a maximum of a thousand or more by changing
 the `ulimit' in the shell.<BR>
 <BR>
-<A NAME="toc35"></A>
+<A NAME="toc36"></A>
 <H2>7.3&nbsp;&nbsp; Idle Connection Shutdown and Remote Call Timeout</H2>
 <A NAME="sec:shut"></A>Inside the ORB, a thread is dedicated to scan for idle connections.
 The thread looks after both the outgoing connections and the incoming
@@ -123,7 +123,7 @@
 <TT>-ORBserverCallTimeOutPeriod</TT> options. The scan can be disabled
 completely by setting the scan granularity to 0.<BR>
 <BR>
-<A NAME="toc36"></A>
+<A NAME="toc37"></A>
 <H2>7.4&nbsp;&nbsp; Interoperability Considerations</H2>The IIOP specification allows both the client and the server to
 shutdown a connection unilaterally. When one end is about to shutdown
 a connection, it should send a closeConnection message to the other
@@ -147,7 +147,7 @@
 in the application code and retry, or to turn off the idle connection
 shutdown inside the omniORB server.<BR>
 <BR>
-<A NAME="toc37"></A>
+<A NAME="toc38"></A>
 <H2>7.5&nbsp;&nbsp; Connection Acceptance</H2>
 <A NAME="sec:accept"></A>omniORB provides the hook to implement a connection acceptance policy.
 Inside the ORB runtime, a thread is dedicated to receive new
Index: doc/omniORBpy/omniORBpy009.html
===================================================================
RCS file: /cvsroot/omniORBpy/doc/omniORBpy/omniORBpy009.html,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- doc/omniORBpy/omniORBpy009.html	2000/08/18 11:40:57	1.1.2.1
+++ doc/omniORBpy/omniORBpy009.html	2000/09/19 11:28:10	1.1.2.2
@@ -26,20 +26,20 @@
  1998.<BR>
 <BR>
 
-<DT><A NAME="corba23-spec"><FONT COLOR=purple>[OMG99a]</FONT></A><DD>
+<DT><A NAME="corba23-spec"><FONT COLOR=purple>[OMG99]</FONT></A><DD>
 Object Management Group.
 <EM>The </EM><EM>C</EM><EM>ommon </EM><EM>O</EM><EM>bject </EM><EM>R</EM><EM>equest </EM><EM>B</EM><EM>roker: </EM><EM>A</EM><EM>rchitecture and
  Specification</EM>, 2.3.1 edition, October 1999.
 From <A HREF="http://cgi.omg.org/corba/cichpter.html"><TT>http://cgi.omg.org/corba/cichpter.html</TT></A>.<BR>
 <BR>
 
-<DT><A NAME="inschapters"><FONT COLOR=purple>[OMG99b]</FONT></A><DD>
+<DT><A NAME="inschapters"><FONT COLOR=purple>[OMG00a]</FONT></A><DD>
 Object Management Group.
-<EM>INS Naming edited chapters document</EM>, December 1999.
-From <A HREF="http://cgi.omg.org/cgi-bin/doc?ptc/99-12-03"><TT>http://cgi.omg.org/cgi-bin/doc?ptc/99-12-03</TT></A>.<BR>
+<EM>Interoperable Naming Service revised chapters</EM>, August 2000.
+From <A HREF="http://cgi.omg.org/cgi-bin/doc?ptc/00-08-07"><TT>http://cgi.omg.org/cgi-bin/doc?ptc/00-08-07</TT></A>.<BR>
 <BR>
 
-<DT><A NAME="pythonmapping"><FONT COLOR=purple>[OMG00]</FONT></A><DD>
+<DT><A NAME="pythonmapping"><FONT COLOR=purple>[OMG00b]</FONT></A><DD>
 Object Management Group.
 <EM>Python Language Mapping Specification</EM>, April 2000.
 From <A HREF="http://cgi.omg.org/cgi-bin/doc?ptc/00-04-08"><TT>http://cgi.omg.org/cgi-bin/doc?ptc/00-04-08</TT></A>.</DL>
Index: doc/tex/omniORBpy.bib
===================================================================
RCS file: /cvsroot/omniORBpy/doc/tex/omniORBpy.bib,v
retrieving revision 1.1.2.1
retrieving revision 1.1.2.2
diff -u -r1.1.2.1 -r1.1.2.2
--- doc/tex/omniORBpy.bib	2000/08/18 11:40:55	1.1.2.1
+++ doc/tex/omniORBpy.bib	2000/09/19 11:28:06	1.1.2.2
@@ -31,11 +31,11 @@
 
 @Manual{inschapters,
   key =          {OMG},
-  title = 	 {INS Naming edited chapters document},
+  title = 	 {Interoperable Naming Service revised chapters},
   organization = {Object Management Group},
-  month =	 {December},
-  year =	 1999,
-  note =	 {From \weburl{http://cgi.omg.org/cgi-bin/doc?ptc/99-12-03}}
+  month =	 {August},
+  year =	 2000,
+  note =	 {From \weburl{http://cgi.omg.org/cgi-bin/doc?ptc/00-08-07}}
 }
 
 @Manual{tjr96a,
Index: doc/tex/omniORBpy.tex
===================================================================
RCS file: /cvsroot/omniORBpy/doc/tex/omniORBpy.tex,v
retrieving revision 1.2.2.2
retrieving revision 1.2.2.3
diff -u -r1.2.2.2 -r1.2.2.3
--- doc/tex/omniORBpy.tex	2000/08/21 09:49:52	1.2.2.2
+++ doc/tex/omniORBpy.tex	2000/09/19 11:28:06	1.2.2.3
@@ -325,6 +325,8 @@
 
 You should also add the \file{bin/}\texttt{\$}\file{FARCH} directory
 to your \envvar{PATH}, so you can run the IDL compiler, omniidl.
+Finally, add the \file{lib/}\texttt{\$}\file{FARCH} directory to
+\envvar{LD_LIBRARY_PATH}, so the omniORB core library can be found.
 
 
 \subsection{Configuration file}
@@ -1963,6 +1965,9 @@
 \cmdline{-N}
      \> Do not run the preprocessor.\\
 
+\cmdline{-T}
+     \> Use a temporary file, not a pipe, for preprocessor output.\\
+
 \cmdline{-Wp}\textit{arg}[,\textit{arg}\dots]
      \> Send arguments to the preprocessor.\\
 
@@ -2017,7 +2022,17 @@
 directives inserted by other preprocessors are likely to confuse
 omniidl.
 
+\subsubsection{Windows 9x}
+
+The output from the C preprocessor is normally fed to the omniidl
+parser through a pipe. On some Windows 98 machines (but not all!)  the
+pipe does not work, and the preprocessor output is echoed to the
+screen. When this happens, the omniidl parser sees an empty file, and
+produces useless stub files with strange long names. To avoid the
+problem, use the `\cmdline{-T}' option to create a temporary file
+between the two stages.
 
+
 \subsection{Forward-declared interfaces}
 
 If you have an IDL file like:
@@ -2548,6 +2563,17 @@
 interoperability.
 
 
+\section{GIOP Requesting Principal field}
+
+In versions 1.0 and 1.1 of the GIOP specification, request messages
+contain a `principal' field which was intended to identify the client.
+The meaning of the principal field was never specified, and its use is
+now deprecated. The field is not present in GIOP 1.2. omniORB normally
+uses the string `\texttt{nobody}' in the principal field. However,
+some systems (e.g.\ the GNOME desktop environment) use the principal
+field as an authentication mechanism, so omniORB allows you to
+configure the principal by setting the \envvar{OMNIORB_PRINCIPAL}
+environment variable.
 
 
 \section{System Exception Handlers}
Index: modules/dir.mk
===================================================================
RCS file: /cvsroot/omniORBpy/modules/dir.mk,v
retrieving revision 1.27.2.1
retrieving revision 1.27.2.6
diff -u -r1.27.2.1 -r1.27.2.6
--- modules/dir.mk	2000/08/07 09:19:23	1.27.2.1
+++ modules/dir.mk	2000/09/28 09:23:10	1.27.2.6
@@ -81,9 +81,13 @@
 ifdef UnixPlatform
 #CXXDEBUGFLAGS = -g
 
-PYPREFIX := $(shell python -c 'import sys; print sys.exec_prefix')
-PYINCDIR := $(PYPREFIX)/include
-DIR_CPPFLAGS += -I$(PYINCDIR)
+PYPREFIX  := $(shell python -c 'import sys; print sys.exec_prefix')
+PYVERSION := $(shell $(PYTHON) -c 'import sys; print sys.version[:3]')
+PYINCDIR  := $(PYPREFIX)/include
+PYINCFILE := "<python$(PYVERSION)/Python.h>"
+PYINCTHRD := "<python$(PYVERSION)/pythread.h>"
+DIR_CPPFLAGS += -I$(PYINCDIR) -DPYTHON_INCLUDE=$(PYINCFILE) -DPYTHON_THREAD_INC=$(PYINCTHRD)
+
 endif
 
 #############################################################################
@@ -188,13 +192,17 @@
 
 ifdef Win32Platform
 
-PYPREFIX1 := $(shell python -c 'import sys,string; sys.stdout.write(string.lower(sys.prefix))')
-PYPREFIX  := $(subst program files,progra~1,$(PYPREFIX1))
+PYPREFIX1 := "$(shell python -c 'import sys,string; sys.stdout.write(string.lower(sys.prefix))')"
+PYPREFIX  := $(subst program files,progra~1,$(subst \,/,$(PYPREFIX1)))
+PYVERSION := $(shell $(PYTHON) -c 'import sys; sys.stdout.write(sys.version[:3])')
 PYINCDIR  := $(PYPREFIX)/include
 PYLIBDIR  := $(PYPREFIX)/libs
+PYLIB     := python$(subst .,,$(PYVERSION)).lib
+
+DIR_CPPFLAGS += -I$(PYINCDIR) -I$(PYINCDIR)/python$(PYVERSION) \
+                -DPYTHON_INCLUDE="<Python.h>" -DPYTHON_THREAD_INC="<pythread.h>"
 
-DIR_CPPFLAGS += -I"$(PYINCDIR)"
-PYLIBPATH = -libpath:"$(PYLIBDIR)"
+PYLIBPATH = $(patsubst %,-libpath:%,$(PYLIBDIR))
 
 implib = _omnipy.lib
 lib = $(patsubst %.lib,%.pyd,$(implib))
@@ -217,7 +225,7 @@
          fi; \
 	 set -x; \
 	 $(RM) $@; \
-	 libs="$(OMNIORB_LIB) python15.lib"; \
+	 libs="$(OMNIORB_LIB) $(PYLIB)"; \
 	 $(CXXLINK) -out:$@ -DLL $(CXXLINKOPTIONS) $(IMPORT_LIBRARY_FLAGS) $(PYLIBPATH) $(OBJS) $$libs; \
 	)
 
@@ -226,7 +234,7 @@
 $(lib): $(OBJS)
 	(set -x; \
 	 $(RM) $@; \
-	 libs="$(OMNIORB_LIB) python15.lib"; \
+	 libs="$(OMNIORB_LIB) $(PYLIB)"; \
 	 $(CXXLINK) -out:$@ -DLL $(CXXLINKOPTIONS) $(IMPORT_LIBRARY_FLAGS) $(PYLIBPATH) $(OBJS) $$libs; \
 	)
 endif
@@ -250,7 +258,7 @@
 
 lib = _omnipymodule.so
 libinit = init_omnipy
-py_exp = /usr/local/lib/python1.5/config/python.exp
+py_exp = /usr/local/lib/python$(PYVERSION)/config/python.exp
 
 ifeq ($(notdir $(CXX)),xlC_r)
 
Index: modules/common/pyExceptions.cc
===================================================================
RCS file: /cvsroot/omniORBpy/modules/common/pyExceptions.cc,v
retrieving revision 1.9.2.1
retrieving revision 1.9.2.2
diff -u -r1.9.2.1 -r1.9.2.2
--- modules/common/pyExceptions.cc	2000/08/17 08:43:34	1.9.2.1
+++ modules/common/pyExceptions.cc	2000/08/22 16:12:44	1.9.2.2
@@ -28,9 +28,12 @@
 //    Exception handling functions
 
 
-// $Id: pyExceptions.cc,v 1.9.2.1 2000/08/17 08:43:34 dpg1 Exp $
+// $Id: pyExceptions.cc,v 1.9.2.2 2000/08/22 16:12:44 dpg1 Exp $
 
 // $Log: pyExceptions.cc,v $
+// Revision 1.9.2.2  2000/08/22 16:12:44  dpg1
+// Properly clear Python error status after unexpected user exception
+//
 // Revision 1.9.2.1  2000/08/17 08:43:34  dpg1
 // Fix possible obscure assertion failure with unexpected user exception
 // containing a member named "minor".
@@ -120,25 +123,26 @@
 {
   CORBA::ULong            minor  = 0;
   CORBA::CompletionStatus status = CORBA::COMPLETED_MAYBE;
-
-  PyObject *a, *b;
 
-  a = PyObject_GetAttrString(eobj, (char*)"minor");
-  if (a && PyInt_Check(a)) {
-    minor = PyInt_AS_LONG(a);
-    Py_DECREF(a);
+  PyObject *m = 0, *c = 0, *v = 0;
 
-    a = PyObject_GetAttrString(eobj, (char*)"completed");
+  m = PyObject_GetAttrString(eobj, (char*)"minor");
+  if (m && PyInt_Check(m)) {
+    minor = PyInt_AS_LONG(m);
 
-    if (a) {
-      b = PyObject_GetAttrString(a, (char*)"_v");
+    c = PyObject_GetAttrString(eobj, (char*)"completed");
 
-      if (b && PyInt_Check(b))
-	status = (CORBA::CompletionStatus)PyInt_AS_LONG(b);
+    if (c) {
+      v = PyObject_GetAttrString(c, (char*)"_v");
 
-      Py_DECREF(a); Py_XDECREF(b);
+      if (v && PyInt_Check(v))
+	status = (CORBA::CompletionStatus)PyInt_AS_LONG(v);
     }
   }
+  Py_XDECREF(m); Py_XDECREF(c); Py_XDECREF(v);
+
+  // Clear any errors raised by the GetAttrs
+  if (PyErr_Occurred()) PyErr_Clear();
 
   char* repoId = PyString_AS_STRING(erepoId);
 
Index: modules/common/pyMarshal.cc
===================================================================
RCS file: /cvsroot/omniORBpy/modules/common/pyMarshal.cc,v
retrieving revision 1.23.2.3
retrieving revision 1.23.2.4
diff -u -r1.23.2.3 -r1.23.2.4
--- modules/common/pyMarshal.cc	2000/08/17 08:44:08	1.23.2.3
+++ modules/common/pyMarshal.cc	2000/09/21 13:20:15	1.23.2.4
@@ -27,9 +27,12 @@
 // Description:
 //    Marshalling / unmarshalling of Python objects
 
-// $Id: pyMarshal.cc,v 1.23.2.3 2000/08/17 08:44:08 dpg1 Exp $
+// $Id: pyMarshal.cc,v 1.23.2.4 2000/09/21 13:20:15 dpg1 Exp $
 
 // $Log: pyMarshal.cc,v $
+// Revision 1.23.2.4  2000/09/21 13:20:15  dpg1
+// Silly bug marshalling sequences of anys and TypeCodes
+//
 // Revision 1.23.2.3  2000/08/17 08:44:08  dpg1
 // Updates for long long were broken on platforms without it
 //
@@ -152,6 +155,22 @@
 #endif
 
 
+// Small function to indicate whether a descriptor represents a type
+// for which we have unrolled sequence marshalling code
+static inline int
+sequenceOptimisedType(PyObject* desc)
+{
+  if (PyInt_Check(desc)) {
+    CORBA::ULong tk = PyInt_AS_LONG(desc);
+
+    return !(tk == CORBA::tk_any ||
+	     tk == CORBA::tk_TypeCode ||
+	     tk == CORBA::tk_Principal);
+  }
+  return 0;
+}
+	
+
 
 #define AS_THROW_BAD_PARAM OMNIORB_THROW(BAD_PARAM, 0,compstatus)
 
@@ -556,7 +575,7 @@
       long          long_val;
       unsigned long ulong_val;
 
-      if (PyInt_Check(elm_desc)) { // Simple type
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet || etk == CORBA::tk_char) {
@@ -919,7 +938,7 @@
       long          long_val;
       unsigned long ulong_val;
 
-      if (PyInt_Check(elm_desc)) { // Simple type
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet || etk == CORBA::tk_char) {
@@ -1618,7 +1637,7 @@
 
       CORBA::ULong i, len;
 
-      if (PyInt_Check(elm_desc)) {
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet) {
@@ -1914,7 +1933,7 @@
 
       CORBA::ULong i, len;
 
-      if (PyInt_Check(elm_desc)) {
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet) {
@@ -2541,7 +2560,7 @@
 
       CORBA::ULong i, len;
 
-      if (PyInt_Check(elm_desc)) {
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet) {
@@ -2837,7 +2856,7 @@
 
       CORBA::ULong i, len;
 
-      if (PyInt_Check(elm_desc)) {
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet) {
@@ -3444,7 +3463,7 @@
 
       CORBA::ULong i;
 
-      if (PyInt_Check(elm_desc)) {
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet) {
@@ -3600,7 +3619,7 @@
 
       CORBA::ULong i;
 
-      if (PyInt_Check(elm_desc)) {
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet) {
@@ -4127,7 +4146,7 @@
 
       CORBA::ULong i;
 
-      if (PyInt_Check(elm_desc)) {
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet) {
@@ -4283,7 +4302,7 @@
 
       CORBA::ULong i;
 
-      if (PyInt_Check(elm_desc)) {
+      if (sequenceOptimisedType(elm_desc)) {
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet) {
@@ -4958,7 +4977,7 @@
 
       CORBA::ULong len, i;
 
-      if (PyInt_Check(elm_desc)) { // Simple type
+      if (sequenceOptimisedType(elm_desc)) { // Simple type
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet || etk == CORBA::tk_char) {
@@ -5432,7 +5451,7 @@
 
       CORBA::ULong len, i;
 
-      if (PyInt_Check(elm_desc)) { // Simple type
+      if (sequenceOptimisedType(elm_desc)) { // Simple type
 	CORBA::ULong etk = PyInt_AS_LONG(elm_desc);
 
 	if (etk == CORBA::tk_octet || etk == CORBA::tk_char) {
Index: modules/common/pyThreadCache.h
===================================================================
RCS file: /cvsroot/omniORBpy/modules/common/pyThreadCache.h,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- modules/common/pyThreadCache.h	2000/05/26 15:33:31	1.1
+++ modules/common/pyThreadCache.h	2000/09/27 15:57:21	1.1.2.1
@@ -28,18 +28,21 @@
 //    Cached mapping from threads to PyThreadState and
 //    threading.Thread objects
 
-// $Id: pyThreadCache.h,v 1.1 2000/05/26 15:33:31 dpg1 Exp $
+// $Id: pyThreadCache.h,v 1.1.2.1 2000/09/27 15:57:21 dpg1 Exp $
 
 // $Log: pyThreadCache.h,v $
+// Revision 1.1.2.1  2000/09/27 15:57:21  dpg1
+// #include<python1.5/pythread.h> generalised for other Python versions
+//
 // Revision 1.1  2000/05/26 15:33:31  dpg1
 // Python thread states are now cached. Operation dispatch time is
 // roughly halved!
 //
 
-#if defined(__WIN32__) || defined(__VMS)
+#if defined(__VMS)
 #include <pythread.h>
 #else
-#include <python1.5/pythread.h>
+#include PYTHON_THREAD_INC
 #endif
 
 
Index: modules/common/pyomniFunc.cc
===================================================================
RCS file: /cvsroot/omniORBpy/modules/common/pyomniFunc.cc,v
retrieving revision 1.1.2.2
retrieving revision 1.1.2.3
diff -u -r1.1.2.2 -r1.1.2.3
--- modules/common/pyomniFunc.cc	2000/08/18 11:40:01	1.1.2.2
+++ modules/common/pyomniFunc.cc	2000/09/19 09:24:16	1.1.2.3
@@ -27,8 +27,11 @@
 // Description:
 //    omniORB API functions
 
-// $Id: pyomniFunc.cc,v 1.1.2.2 2000/08/18 11:40:01 dpg1 Exp $
+// $Id: pyomniFunc.cc,v 1.1.2.3 2000/09/19 09:24:16 dpg1 Exp $
 // $Log: pyomniFunc.cc,v $
+// Revision 1.1.2.3  2000/09/19 09:24:16  dpg1
+// More paranoid about clearing Python error status
+//
 // Revision 1.1.2.2  2000/08/18 11:40:01  dpg1
 // New omniORB.traceLevel function
 //
@@ -77,6 +80,8 @@
 		      "Traceback follows:");
 	PyErr_Print();
       }
+      else
+	PyErr_Clear();
       return 0;
     }
     if (!PyInt_Check(r)) {
@@ -121,6 +126,8 @@
 		      "Traceback follows:");
 	PyErr_Print();
       }
+      else
+	PyErr_Clear();
       return 0;
     }
     if (!PyInt_Check(r)) {
@@ -164,6 +171,8 @@
 		      "Traceback follows:");
 	PyErr_Print();
       }
+      else
+	PyErr_Clear();
       return 0;
     }
     if (!PyInt_Check(r)) {
Index: modules/omni28/omnipy28.h
===================================================================
RCS file: /cvsroot/omniORBpy/modules/omni28/omnipy28.h,v
retrieving revision 1.23
retrieving revision 1.23.2.1
diff -u -r1.23 -r1.23.2.1
--- modules/omni28/omnipy28.h	2000/06/27 15:13:11	1.23
+++ modules/omni28/omnipy28.h	2000/09/06 11:20:49	1.23.2.1
@@ -27,9 +27,12 @@
 // Description:
 //    Master header file for omnipy internals, omniORB 2.8 version
 
-// $Id: omnipy28.h,v 1.23 2000/06/27 15:13:11 dpg1 Exp $
+// $Id: omnipy28.h,v 1.23.2.1 2000/09/06 11:20:49 dpg1 Exp $
 
 // $Log: omnipy28.h,v $
+// Revision 1.23.2.1  2000/09/06 11:20:49  dpg1
+// Support for Python 1.6 and 2.0b1.
+//
 // Revision 1.23  2000/06/27 15:13:11  dpg1
 // New copyObjRefArgument() function
 //
@@ -113,10 +116,10 @@
 #ifndef _omnipy28_h_
 #define _omnipy28_h_
 
-#if defined(__WIN32__) || defined(__VMS)
+#if defined(__VMS)
 #include <Python.h>
 #else
-#include <python1.5/Python.h>
+#include PYTHON_INCLUDE
 #endif
 
 #include <omniORB2/CORBA.h>
Index: modules/omni28/pyServant.cc
===================================================================
RCS file: /cvsroot/omniORBpy/modules/omni28/pyServant.cc,v
retrieving revision 1.17.2.1
retrieving revision 1.17.2.2
diff -u -r1.17.2.1 -r1.17.2.2
--- modules/omni28/pyServant.cc	2000/08/14 16:10:32	1.17.2.1
+++ modules/omni28/pyServant.cc	2000/09/01 14:13:00	1.17.2.2
@@ -28,9 +28,12 @@
 //    Implementation of Python servant object
 
 
-// $Id: pyServant.cc,v 1.17.2.1 2000/08/14 16:10:32 dpg1 Exp $
+// $Id: pyServant.cc,v 1.17.2.2 2000/09/01 14:13:00 dpg1 Exp $
 
 // $Log: pyServant.cc,v $
+// Revision 1.17.2.2  2000/09/01 14:13:00  dpg1
+// Memory leak when returning invalid data
+//
 // Revision 1.17.2.1  2000/08/14 16:10:32  dpg1
 // Missed out some explicit casts to (char*) for string constants.
 //
@@ -235,19 +238,26 @@
     if (out_l >= 0) {
       CORBA::ULong msgsize = GIOP_S::ReplyHeaderSize();
 
-      if (out_l == 1) {
-	msgsize = omniPy::alignedSize(msgsize,
-				      PyTuple_GET_ITEM(out_d, 0),
-				      result,
-				      CORBA::COMPLETED_MAYBE);
-      }
-      else if (out_l > 1) {
-	for (i=0; i < out_l; i++) {
+      try {
+	if (out_l == 1) {
 	  msgsize = omniPy::alignedSize(msgsize,
-					PyTuple_GET_ITEM(out_d,  i),
-					PyTuple_GET_ITEM(result, i),
+					PyTuple_GET_ITEM(out_d, 0),
+					result,
 					CORBA::COMPLETED_MAYBE);
 	}
+	else if (out_l > 1) {
+	  for (i=0; i < out_l; i++) {
+	    msgsize = omniPy::alignedSize(msgsize,
+					  PyTuple_GET_ITEM(out_d,  i),
+					  PyTuple_GET_ITEM(result, i),
+					  CORBA::COMPLETED_MAYBE);
+	  }
+	}
+      }
+      catch (...) {
+	// alignedSize() can throw BAD_PARAM and others
+	Py_DECREF(result);
+	throw;
       }
       giop_server.InitialiseReply(GIOP::NO_EXCEPTION, msgsize);
 
Index: modules/omni30/omnipy30.h
===================================================================
RCS file: /cvsroot/omniORBpy/modules/omni30/omnipy30.h,v
retrieving revision 1.25
retrieving revision 1.25.2.2
diff -u -r1.25 -r1.25.2.2
--- modules/omni30/omnipy30.h	2000/06/27 15:13:11	1.25
+++ modules/omni30/omnipy30.h	2000/09/21 11:05:49	1.25.2.2
@@ -27,9 +27,15 @@
 // Description:
 //    Master header file for omnipy internals, omniORB 3.0 version.
 
-// $Id: omnipy30.h,v 1.25 2000/06/27 15:13:11 dpg1 Exp $
+// $Id: omnipy30.h,v 1.25.2.2 2000/09/21 11:05:49 dpg1 Exp $
 
 // $Log: omnipy30.h,v $
+// Revision 1.25.2.2  2000/09/21 11:05:49  dpg1
+// Fix race condition with Py_omniServant deletion.
+//
+// Revision 1.25.2.1  2000/09/06 11:20:49  dpg1
+// Support for Python 1.6 and 2.0b1.
+//
 // Revision 1.25  2000/06/27 15:13:11  dpg1
 // New copyObjRefArgument() function
 //
@@ -121,10 +127,10 @@
 #ifndef _omnipy30_h_
 #define _omnipy30_h_
 
-#if defined(__WIN32__) || defined(__VMS)
+#if defined(__VMS)
 #include <Python.h>
 #else
-#include <python1.5/Python.h>
+#include PYTHON_INCLUDE
 #endif
 
 #include <omniORB3/CORBA.h>
@@ -491,7 +497,7 @@
   // Servant object                                                         //
   ////////////////////////////////////////////////////////////////////////////
 
-  class Py_omniServant : public virtual PortableServer::RefCountServantBase {
+  class Py_omniServant : public virtual PortableServer::ServantBase {
 
   public:
 
@@ -516,12 +522,19 @@
 
     inline PyObject* pyServant() { Py_INCREF(pyservant_); return pyservant_; }
 
-  private:
+    // _add_ref and _remove_ref lock the Python interpreter lock
+    // _locked versions assume the interpreter lock is already locked
+    virtual void                    _add_ref();
+    virtual void                    _remove_ref();
+    void                            _locked_add_ref();
+    void                            _locked_remove_ref();
 
+  private:
     PyObject* pyservant_;	// Python servant object
     PyObject* opdict_;		// Operation descriptor dictionary
     PyObject* pyskeleton_;	// Skeleton class object
     char*     repoId_;
+    int       refcount_;
 
     // Not implemented:
     Py_omniServant(const Py_omniServant&);
@@ -531,6 +544,8 @@
   // Function to find or create a Py_omniServant object for a Python
   // servant object. If the Python object is not an instance of a
   // class derived from PortableServer.Servant, returns 0.
+  //
+  // Caller must hold the Python interpreter lock.
   static Py_omniServant* getServantForPyObject(PyObject* pyservant);
 
 
Index: modules/omni30/pyPOAFunc.cc
===================================================================
RCS file: /cvsroot/omniORBpy/modules/omni30/pyPOAFunc.cc,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -r1.12 -r1.12.2.1
--- modules/omni30/pyPOAFunc.cc	2000/05/26 15:33:32	1.12
+++ modules/omni30/pyPOAFunc.cc	2000/09/21 11:05:49	1.12.2.1
@@ -27,8 +27,11 @@
 // Description:
 //    POA functions
 
-// $Id: pyPOAFunc.cc,v 1.12 2000/05/26 15:33:32 dpg1 Exp $
+// $Id: pyPOAFunc.cc,v 1.12.2.1 2000/09/21 11:05:49 dpg1 Exp $
 // $Log: pyPOAFunc.cc,v $
+// Revision 1.12.2.1  2000/09/21 11:05:49  dpg1
+// Fix race condition with Py_omniServant deletion.
+//
 // Revision 1.12  2000/05/26 15:33:32  dpg1
 // Python thread states are now cached. Operation dispatch time is
 // roughly halved!
@@ -511,19 +514,15 @@
     try {
       PortableServer::Servant servant;
       omniPy::Py_omniServant* pyos;
-      PyObject*               pyservant;
       {
 	omniPy::InterpreterUnlocker _u;
 	servant = poa->get_servant();
 	pyos =
 	  (omniPy::Py_omniServant*)servant->_ptrToInterface("Py_omniServant");
-
-	if (pyos) {
-	  pyservant = pyos->pyServant();
-	  pyos->_remove_ref();
-	}
       }
       if (pyos) {
+	PyObject* pyservant = pyos->pyServant();
+	pyos->_locked_remove_ref();
 	return pyservant;
       }
       else {
@@ -824,19 +823,15 @@
     try {
       PortableServer::Servant servant;
       omniPy::Py_omniServant* pyos;
-      PyObject*               pyservant;
       {
 	omniPy::InterpreterUnlocker _u;
 	servant = poa->reference_to_servant(objref);
 	pyos =
 	  (omniPy::Py_omniServant*)servant->_ptrToInterface("Py_omniServant");
-
-	if (pyos) {
-	  pyservant = pyos->pyServant();
-	  pyos->_remove_ref();
-	}
       }
       if (pyos) {
+	PyObject* pyservant = pyos->pyServant();
+	pyos->_locked_remove_ref();
 	return pyservant;
       }
       else {
@@ -911,19 +906,15 @@
       PortableServer::ObjectId oid(oidlen, oidlen, (CORBA::Octet*)oidstr, 0);
       PortableServer::Servant servant;
       omniPy::Py_omniServant* pyos;
-      PyObject*               pyservant;
       {
 	omniPy::InterpreterUnlocker _u;
 	servant = poa->id_to_servant(oid);
 	pyos =
 	  (omniPy::Py_omniServant*)servant->_ptrToInterface("Py_omniServant");
-
-	if (pyos) {
-	  pyservant = pyos->pyServant();
-	  pyos->_remove_ref();
-	}
       }
       if (pyos) {
+	PyObject* pyservant = pyos->pyServant();
+	pyos->_locked_remove_ref();
 	return pyservant;
       }
       else {
Index: modules/omni30/pyServant.cc
===================================================================
RCS file: /cvsroot/omniORBpy/modules/omni30/pyServant.cc,v
retrieving revision 1.24.2.1
retrieving revision 1.24.2.4
diff -u -r1.24.2.1 -r1.24.2.4
--- modules/omni30/pyServant.cc	2000/08/17 08:46:06	1.24.2.1
+++ modules/omni30/pyServant.cc	2000/09/21 11:05:49	1.24.2.4
@@ -27,9 +27,18 @@
 // Description:
 //    Implementation of Python servant object
 
-// $Id: pyServant.cc,v 1.24.2.1 2000/08/17 08:46:06 dpg1 Exp $
+// $Id: pyServant.cc,v 1.24.2.4 2000/09/21 11:05:49 dpg1 Exp $
 
 // $Log: pyServant.cc,v $
+// Revision 1.24.2.4  2000/09/21 11:05:49  dpg1
+// Fix race condition with Py_omniServant deletion.
+//
+// Revision 1.24.2.3  2000/09/19 09:24:16  dpg1
+// More paranoid about clearing Python error status
+//
+// Revision 1.24.2.2  2000/09/01 14:13:01  dpg1
+// Memory leak when returning invalid data
+//
 // Revision 1.24.2.1  2000/08/17 08:46:06  dpg1
 // Support for omniORB.LOCATION_FORWARD exception
 //
@@ -242,7 +251,7 @@
 omniPy::
 Py_omniServant::Py_omniServant(PyObject* pyservant, PyObject* opdict,
 			       const char* repoId)
-  : pyservant_(pyservant), opdict_(opdict)
+  : pyservant_(pyservant), opdict_(opdict), refcount_(1)
 {
   repoId_ = CORBA::string_dup(repoId);
 
@@ -260,7 +269,6 @@
 omniPy::
 Py_omniServant::~Py_omniServant()
 {
-  omnipyThreadCache::lock _t;
   omniPy::remTwin(pyservant_, SERVANT_TWIN);
   Py_DECREF(pyservant_);
   Py_DECREF(opdict_);
@@ -269,6 +277,45 @@
 }
 
 
+void
+omniPy::
+Py_omniServant::_add_ref()
+{
+  omnipyThreadCache::lock _t;
+  OMNIORB_ASSERT(refcount_ > 0);
+  ++refcount_;
+}
+
+void
+omniPy::
+Py_omniServant::_locked_add_ref()
+{
+  OMNIORB_ASSERT(refcount_ > 0);
+  ++refcount_;
+}
+
+void
+omniPy::
+Py_omniServant::_remove_ref()
+{
+  omnipyThreadCache::lock _t;
+  if (--refcount_ > 0) return;
+
+  OMNIORB_ASSERT(refcount_ == 0);
+  delete this;
+}
+
+void
+omniPy::
+Py_omniServant::_locked_remove_ref()
+{
+  if (--refcount_ > 0) return;
+
+  OMNIORB_ASSERT(refcount_ == 0);
+  delete this;
+}
+
+
 void*
 omniPy::
 Py_omniServant::_ptrToInterface(const char* repoId)
@@ -319,6 +366,8 @@
 	   "Returning Root POA\n";
       PyErr_Print();
     }
+    else
+      PyErr_Clear();
   }
   CORBA::Object_var obj = omniPy::orb->resolve_initial_references("RootPOA");
   return PortableServer::POA::_narrow(obj);
@@ -490,20 +539,27 @@
     if (out_l >= 0) {
       CORBA::ULong msgsize = GIOP_S::ReplyHeaderSize();
 
-      if (out_l == 1) {
-	msgsize = omniPy::alignedSize(msgsize,
-				      PyTuple_GET_ITEM(out_d, 0),
-				      result,
-				      CORBA::COMPLETED_MAYBE);
-      }
-      else if (out_l > 1) {
-	for (i=0; i < out_l; i++) {
+      try {
+	if (out_l == 1) {
 	  msgsize = omniPy::alignedSize(msgsize,
-					PyTuple_GET_ITEM(out_d,  i),
-					PyTuple_GET_ITEM(result, i),
+					PyTuple_GET_ITEM(out_d, 0),
+					result,
 					CORBA::COMPLETED_MAYBE);
 	}
+	else if (out_l > 1) {
+	  for (i=0; i < out_l; i++) {
+	    msgsize = omniPy::alignedSize(msgsize,
+					  PyTuple_GET_ITEM(out_d,  i),
+					  PyTuple_GET_ITEM(result, i),
+					  CORBA::COMPLETED_MAYBE);
+	  }
+	}
       }
+      catch (...) {
+	// alignedSize() can throw BAD_PARAM and others
+	Py_DECREF(result);
+	throw;
+      }
       giop_s.InitialiseReply(GIOP::NO_EXCEPTION, msgsize);
 
       if (out_l == 1) {
@@ -775,7 +831,6 @@
 
 Py_ServantActivator::~Py_ServantActivator()
 {
-  omnipyThreadCache::lock _t;
   Py_DECREF(pysa_);
 }
 
@@ -915,10 +970,7 @@
   Py_DECREF(method);
   Py_DECREF(argtuple);
 
-  {
-    omniPy::InterpreterUnlocker _u;
-    pyos->_remove_ref();
-  }
+  pyos->_locked_remove_ref();
 
   if (result)
     Py_DECREF(result);
@@ -929,6 +981,8 @@
       omniORB::logf("omniORBpy: Traceback follows:");
       PyErr_Print();
     }
+    else
+      PyErr_Clear();
   }
 }
 
@@ -960,7 +1014,6 @@
 
 Py_ServantLocator::~Py_ServantLocator()
 {
-  omnipyThreadCache::lock _t;
   Py_DECREF(pysl_);
 }
 
@@ -1116,10 +1169,7 @@
   Py_DECREF(method);
   Py_DECREF(argtuple);
 
-  {
-    omniPy::InterpreterUnlocker _u;
-    pyos->_remove_ref();
-  }
+  pyos->_locked_remove_ref();
 
   if (result)
     Py_DECREF(result);
@@ -1130,6 +1180,8 @@
       omniORB::logf("omniORBpy: Traceback follows:");
       PyErr_Print();
     }
+    else
+      PyErr_Clear();
   }
 }
 
@@ -1161,7 +1213,6 @@
 
 Py_AdapterActivator::~Py_AdapterActivator()
 {
-  omnipyThreadCache::lock _t;
   Py_DECREF(pyaa_);
 }
 
@@ -1204,6 +1255,8 @@
       omniORB::logf("omniORBpy: Traceback follows:");
       PyErr_Print();
     }
+    else
+      PyErr_Clear();
   }
   return 0;
 }
@@ -1255,7 +1308,7 @@
   // Is there a Py_omniServant already?
   pyos = (omniPy::Py_omniServant*)omniPy::getTwin(pyservant, SERVANT_TWIN);
   if (pyos) {
-    pyos->_add_ref();
+    pyos->_locked_add_ref();
     return pyos;
   }
 
@@ -1283,7 +1336,6 @@
     pyos = new omniPy::Py_omniServant(pyservant, opdict,
 				      PyString_AS_STRING(pyrepoId));
   }
-
   Py_DECREF(opdict);
   Py_DECREF(pyrepoId);
 
Index: omniidl/cxx/dir.mk
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/dir.mk,v
retrieving revision 1.25.2.1
retrieving revision 1.25.2.4
diff -u -r1.25.2.1 -r1.25.2.4
--- omniidl/cxx/dir.mk	2000/08/21 09:10:46	1.25.2.1
+++ omniidl/cxx/dir.mk	2000/09/07 16:24:29	1.25.2.4
@@ -56,9 +56,11 @@
 
 ifdef UnixPlatform
 #CXXDEBUGFLAGS = -g
-PYPREFIX := $(shell $(PYTHON) -c 'import sys; print sys.exec_prefix')
-PYINCDIR := $(PYPREFIX)/include
-DIR_CPPFLAGS += -I$(PYINCDIR)
+PYPREFIX  := $(shell $(PYTHON) -c 'import sys; print sys.exec_prefix')
+PYVERSION := $(shell $(PYTHON) -c 'import sys; print sys.version[:3]')
+PYINCDIR  := $(PYPREFIX)/include
+PYINCFILE := "<python$(PYVERSION)/Python.h>"
+DIR_CPPFLAGS += -I$(PYINCDIR) -DPYTHON_INCLUDE=$(PYINCFILE)
 endif
 
 
@@ -168,10 +170,14 @@
 
 PYPREFIX1 := "$(shell $(PYTHON) -c 'import sys,string; sys.stdout.write(string.lower(sys.prefix))')"
 PYPREFIX  := $(subst program files,progra~1,$(subst \,/,$(PYPREFIX1)))
+PYVERSION := $(shell $(PYTHON) -c 'import sys; sys.stdout.write(sys.version[:3])')
 PYINCDIR  := $(PYPREFIX)/include
 PYLIBDIR  := $(PYPREFIX)/libs $(PYPREFIX)/lib/x86_win32
+PYLIB     := python$(subst .,,$(PYVERSION)).lib
+
+DIR_CPPFLAGS += -I$(PYINCDIR) -I$(PYINCDIR)/python$(PYVERSION) \
+                -DPYTHON_INCLUDE="<Python.h>"
 
-DIR_CPPFLAGS += -I$(PYINCDIR) -I$(PYINCDIR)/python1.5
 CXXLINKOPTIONS += $(patsubst %,-libpath:%,$(PYLIBDIR))
 
 omniidl = $(patsubst %,$(BinPattern),omniidl)
@@ -185,7 +191,7 @@
 	$(RM) $(omniidl)
 
 $(omniidl): $(OBJS) $(PYOBJS)
-	@(libs="python15.lib"; $(CXXExecutable))
+	@(libs="$(PYLIB)"; $(CXXExecutable))
 
 endif
 
@@ -201,7 +207,7 @@
 
 lib = _omniidlmodule.so
 libinit = init_omniidl
-py_exp = /usr/local/lib/python1.5/config/python.exp
+py_exp = /usr/local/lib/python$(PYVERSION)/config/python.exp
 
 ifeq ($(notdir $(CXX)),xlC_r)
 
@@ -372,7 +378,7 @@
 # 	$(RM) $(omniidl)
 #
 # $(omniidl): $(OBJS) $(PYOBJS)
-# 	@(libs="-lpython1.5 -lpthread"; $(CXXExecutable))
+# 	@(libs="-lpython$(PYVERSION) -lpthread"; $(CXXExecutable))
 
 
 endif
Index: omniidl/cxx/idlast.cc
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/idlast.cc,v
retrieving revision 1.21.2.2
retrieving revision 1.21.2.4
diff -u -r1.21.2.2 -r1.21.2.4
--- omniidl/cxx/idlast.cc	2000/08/21 09:10:46	1.21.2.2
+++ omniidl/cxx/idlast.cc	2000/08/29 10:20:23	1.21.2.4
@@ -26,8 +26,15 @@
 //   
 //   Abstract Syntax Tree objects and support functions
 
-// $Id: idlast.cc,v 1.21.2.2 2000/08/21 09:10:46 dpg1 Exp $
+// $Id: idlast.cc,v 1.21.2.4 2000/08/29 10:20:23 dpg1 Exp $
 // $Log: idlast.cc,v $
+// Revision 1.21.2.4  2000/08/29 10:20:23  dpg1
+// Operations and attributes now have repository ids.
+//
+// Revision 1.21.2.3  2000/08/25 13:33:01  dpg1
+// Multiple comments preceding a declaration are now properly attached on
+// all platforms
+//
 // Revision 1.21.2.2  2000/08/21 09:10:46  dpg1
 // Merge omniidl long long support from omniORB 3
 //
@@ -35,7 +42,7 @@
 // Incorrect error report when inheriting typedef to forward declared
 // interface
 //
-// Revision 1.21  2000/06/08 14:36:18  dpg1
+// Revision 1.14.2.5  2000/06/08 14:36:19  dpg1
 // Comments and pragmas are now objects rather than plain strings, so
 // they can have file,line associated with them.
 //
@@ -136,8 +143,14 @@
 {
   if (Config::keepComments) {
     if (Config::commentsFirst) {
-      if (saved_)
-	mostRecent_->next_ = new Comment(commentText, file, line);
+      if (saved_) {
+	// C++ says that the order of value evaluation is undefined.
+	// Comment's constructor sets mostRecent_, so the innocent-
+	// looking mostRecent_->next_ = new Comment... does the wrong
+	// thing with some compilers :-(
+	Comment* mr = mostRecent_;
+	mr->next_ = new Comment(commentText, file, line);
+      }
       else
 	saved_ = new Comment(commentText, file, line);
     }
@@ -313,13 +326,22 @@
   const Scope::Entry* se = Scope::current()->findScopedName(sn, file, line);
 
   if (se) {
-    if (se->kind() == Scope::Entry::E_DECL) {
+    switch (se->kind()) {
+
+    case Scope::Entry::E_MODULE:
+    case Scope::Entry::E_DECL:
+    case Scope::Entry::E_CALLABLE:
+    case Scope::Entry::E_INHERITED:
       return se->decl();
+
+    default:
+      {
+	char* ssn = sn->toString();
+	IdlError(file, line, "`%s' is not a declaration", ssn);
+	IdlErrorCont(se->file(), se->line(), "(`%s' created here)", ssn);
+	delete [] ssn;
+      }
     }
-    char* ssn = sn->toString();
-    IdlError(file, line, "`%s' is not a declaration", ssn);
-    IdlErrorCont(se->file(), se->line(), "(`%s' created here)", ssn);
-    delete [] ssn;
   }
   return 0;
 }
@@ -823,7 +845,8 @@
     DeclRepoId(identifier),
     sizes_(sizes),
     thisType_(0),
-    alias_(0)
+    alias_(0),
+    attribute_(0)
 {
 }
 
@@ -838,8 +861,9 @@
 Declarator::
 kindAsString() const
 {
-  if (alias_) return "typedef declarator";
-  else return "declarator";
+  if (alias_)     return "typedef declarator";
+  if (attribute_) return "attribute declarator";
+                  return "declarator";
 }
 
 void
@@ -850,6 +874,13 @@
   thisType_ = new DeclaredType(IdlType::tk_alias, this, this);
 }
 
+void
+Declarator::
+setAttribute(Attribute* at)
+{
+  attribute_ = at;
+}
+
 // Typedef
 Typedef::
 Typedef(const char* file, int line, _CORBA_Boolean mainFile,
@@ -1372,7 +1403,8 @@
 
   for (Declarator* d = declarators; d; d = (Declarator*)d->next()) {
     assert(!d->sizes()); // Enforced by grammar
-    Scope::current()->addCallable(d->eidentifier(), 0, this, file, line);
+    d->setAttribute(this);
+    Scope::current()->addCallable(d->eidentifier(), 0, d, file, line);
   }
 }
 
@@ -1484,6 +1516,7 @@
 	  const char* identifier)
 
   : Decl(D_OPERATION, file, line, mainFile),
+    DeclRepoId(identifier),
     oneway_(oneway),
     returnType_(returnType),
     parameters_(0),
@@ -1493,11 +1526,6 @@
   if (returnType) delType_ = returnType->shouldDelete();
   else            delType_ = 0;
 
-  if (identifier[0] == '_')
-    identifier_ = idl_strdup(identifier+1);
-  else
-    identifier_ = idl_strdup(identifier);
-
   Scope* s = Scope::current()->newOperationScope(file, line);
   Scope::current()->addCallable(identifier, s, this, file, line);
   Scope::startScope(s);
@@ -1506,7 +1534,6 @@
 Operation::
 ~Operation()
 {
-  delete [] identifier_;
   if (parameters_) delete parameters_;
   if (raises_)     delete raises_;
   if (contexts_)   delete contexts_;
Index: omniidl/cxx/idlast.h
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/idlast.h,v
retrieving revision 1.14.2.1
retrieving revision 1.14.2.2
diff -u -r1.14.2.1 -r1.14.2.2
--- omniidl/cxx/idlast.h	2000/08/04 11:50:19	1.14.2.1
+++ omniidl/cxx/idlast.h	2000/08/29 10:20:23	1.14.2.2
@@ -26,12 +26,15 @@
 //   
 //   Definitions for abstract syntax tree classes
 
-// $Id: idlast.h,v 1.14.2.1 2000/08/04 11:50:19 dpg1 Exp $
+// $Id: idlast.h,v 1.14.2.2 2000/08/29 10:20:23 dpg1 Exp $
 // $Log: idlast.h,v $
-// Revision 1.14.2.1  2000/08/04 11:50:19  dpg1
+// Revision 1.14.2.2  2000/08/29 10:20:23  dpg1
+// Operations and attributes now have repository ids.
+//
+// Revision 1.8.2.5  2000/08/04 11:39:03  dpg1
 // Updates for AIX with xlC
 //
-// Revision 1.14  2000/06/08 14:36:18  dpg1
+// Revision 1.8.2.4  2000/06/08 14:36:19  dpg1
 // Comments and pragmas are now objects rather than plain strings, so
 // they can have file,line associated with them.
 //
@@ -515,6 +518,7 @@
 
 
 class Typedef;
+class Attribute;
 
 class Declarator : public Decl, public DeclRepoId {
 public:
@@ -530,17 +534,20 @@
 				// Null if a simple declarator
 
   // Only for typedef declarators
-  IdlType*   thisType() const { return thisType_; }
-  Typedef*   alias()    const { return alias_; } 
+  IdlType*   thisType()  const { return thisType_; }
+  Typedef*   alias()     const { return alias_; } 
+  Attribute* attribute() const { return attribute_; }
 
   void accept(AstVisitor& visitor) { visitor.visitDeclarator(this); }
 
-  void setAlias(Typedef* td);
+  void setAlias    (Typedef*   td);
+  void setAttribute(Attribute* at);
 
 private:
   ArraySize*  sizes_;
   IdlType*    thisType_;
   Typedef*    alias_;
+  Attribute*  attribute_;
 };
 
 
@@ -915,7 +922,7 @@
 
 
 // Operation
-class Operation : public Decl {
+class Operation : public Decl, public DeclRepoId {
 public:
   Operation(const char* file, int line, _CORBA_Boolean mainFile,
 	    _CORBA_Boolean oneway, IdlType* return_type,
@@ -927,7 +934,6 @@
   // Queries
   _CORBA_Boolean oneway()     const { return oneway_; }
   IdlType*       returnType() const { return returnType_; }
-  const char*    identifier() const { return identifier_; }
   Parameter*     parameters() const { return parameters_; }
   RaisesSpec*    raises()     const { return raises_; }
   ContextSpec*   contexts()   const { return contexts_; }
@@ -942,7 +948,6 @@
   _CORBA_Boolean oneway_;
   IdlType*       returnType_;
   _CORBA_Boolean delType_;
-  char*          identifier_;
   Parameter*     parameters_;
   RaisesSpec*    raises_;
   ContextSpec*   contexts_;
Index: omniidl/cxx/idldump.cc
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/idldump.cc,v
retrieving revision 1.11.2.1
retrieving revision 1.11.2.2
diff -u -r1.11.2.1 -r1.11.2.2
--- omniidl/cxx/idldump.cc	2000/08/14 14:39:10	1.11.2.1
+++ omniidl/cxx/idldump.cc	2000/08/29 10:20:24	1.11.2.2
@@ -26,13 +26,13 @@
 //   
 //   Visitor object to dump the tree
 
-// $Id: idldump.cc,v 1.11.2.1 2000/08/14 14:39:10 dpg1 Exp $
+// $Id: idldump.cc,v 1.11.2.2 2000/08/29 10:20:24 dpg1 Exp $
 // $Log: idldump.cc,v $
-// Revision 1.11.2.1  2000/08/14 14:39:10  dpg1
-// IDL dumping now properly escapes string and char constants
+// Revision 1.11.2.2  2000/08/29 10:20:24  dpg1
+// Operations and attributes now have repository ids.
 //
-// Revision 1.11  2000/03/03 17:41:40  dpg1
-// Major reorganisation to support omniORB 3.0 as well as 2.8.
+// Revision 1.9.2.1  2000/08/14 14:35:13  dpg1
+// IDL dumping now properly escapes string and char constants
 //
 // Revision 1.9  2000/02/03 14:50:08  dpg1
 // Native declarations can now be used as types.
@@ -242,8 +242,6 @@
   printf("%s", d->identifier());
   for (ArraySize* s = d->sizes(); s; s = s->next())
     printf("[%d]", s->size());
-  if (d->alias())
-    printf(" /* RepoId = %s */", d->repoId());
 }
 
 void
Index: omniidl/cxx/idlpython.cc
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/idlpython.cc,v
retrieving revision 1.23.2.2
retrieving revision 1.23.2.6
diff -u -r1.23.2.2 -r1.23.2.6
--- omniidl/cxx/idlpython.cc	2000/08/21 09:10:47	1.23.2.2
+++ omniidl/cxx/idlpython.cc	2000/09/06 11:40:23	1.23.2.6
@@ -26,20 +26,36 @@
 //   
 //   Python interface to front-end
 
-// $Id: idlpython.cc,v 1.23.2.2 2000/08/21 09:10:47 dpg1 Exp $
+// $Id: idlpython.cc,v 1.23.2.6 2000/09/06 11:40:23 dpg1 Exp $
 // $Log: idlpython.cc,v $
-// Revision 1.23.2.2  2000/08/21 09:10:47  dpg1
-// Merge omniidl long long support from omniORB 3
+// Revision 1.23.2.6  2000/09/06 11:40:23  dpg1
+// Support for Python 1.6 and 2.0b1.
 //
-// Revision 1.23.2.1  2000/08/14 16:09:17  dpg1
+// Revision 1.23.2.5  2000/08/30 18:12:45  dpg1
+// Register operation declarations so they can be found with findDecl().
+//
+// Revision 1.23.2.4  2000/08/29 15:20:27  dpg1
+// New relativeScope() function. New -i flag to enter interactive loop
+// after parsing
+//
+// Revision 1.23.2.3  2000/08/29 10:20:24  dpg1
+// Operations and attributes now have repository ids.
+//
+// Revision 1.15.2.11  2000/08/14 16:07:52  dpg1
 // Error message now says "Could not open..." rather than "Could not
 // find..." when Python imports fail.
+//
+// Revision 1.15.2.10  2000/08/07 15:34:36  dpg1
+// Partial back-port of long long from omni3_1_develop.
 //
-// Revision 1.23  2000/06/20 13:55:58  dpg1
+// Revision 1.15.2.9  2000/06/27 16:23:25  sll
+// Merged OpenVMS port.
+//
+// Revision 1.15.2.8  2000/06/20 13:55:58  dpg1
 // omniidl now keeps the C++ tree until after the back-ends have run.
 // This means that back-ends can be C++ extension modules.
 //
-// Revision 1.22  2000/06/08 14:36:18  dpg1
+// Revision 1.15.2.7  2000/06/08 14:36:19  dpg1
 // Comments and pragmas are now objects rather than plain strings, so
 // they can have file,line associated with them.
 //
@@ -111,15 +127,13 @@
 // First revision.
 //
 
-#if defined(__WIN32__)
-#include <Python.h>
-#elif defined(__VMS)
+#if defined(__VMS)
 #  if defined(__DECCXX) && __DECCXX_VER < 60000000
       struct _typeobject;
 #  endif
 #include <python_include/python.h>
 #else
-#include <python1.5/Python.h>
+#include PYTHON_INCLUDE
 #endif
 
 #include <idlsysdep.h>
@@ -134,7 +148,7 @@
 
 // PyLongFromLongLong is broken in Python 1.5.2. Workaround here:
 #ifdef HAS_LongLong
-#  if !defined(PY_VERSION_HEX) || (PY_VERSION_HEX < 0X01050200)
+#  if !defined(PY_VERSION_HEX) || (PY_VERSION_HEX < 0x01050200)
 #    error "omniidl requires Python 1.5.2 or higher"
 
 #  elif (PY_VERSION_HEX < 0x02000000)
@@ -202,13 +216,14 @@
 
   PyObject* result() { return result_; }
 
+  static PyObject* scopedNameToList(const ScopedName* sn);
+  static PyObject* wstringToList(const _CORBA_WChar* ws);
+
 private:
-  PyObject* scopedNameToList(const ScopedName* sn);
   PyObject* pragmasToList(const Pragma* ps);
   PyObject* commentsToList(const Comment* cs);
   void      registerPyDecl(const ScopedName* sn, PyObject* pydecl);
   PyObject* findPyDecl(const ScopedName* sn);
-  PyObject* wstringToList(const _CORBA_WChar* ws);
 
   PyObject* idlast_;
   PyObject* idltype_;
@@ -380,8 +395,8 @@
 				scopedNameToList(m->scopedName()),
 				m->repoId(),
 				pydecls);
-  registerPyDecl(m->scopedName(), result_);
   ASSERT_RESULT;
+  registerPyDecl(m->scopedName(), result_);
 }
 
 void
@@ -830,65 +845,21 @@
   PyObject* pyattrType = result_;
 
   Declarator* d;
-  int         i;
-
-  for (i=0, d = a->declarators(); d; d = (Declarator*)d->next(), ++i);
-  PyObject* pyidentifiers = PyList_New(i);
+  int         i, l;
 
-  PyObject *pragmas  = 0;
-  PyObject *comments = 0;
-  PyObject *tmp1, *tmp2;
+  for (l=0, d = a->declarators(); d; d = (Declarator*)d->next(), ++l);
+  PyObject* pydeclarators = PyList_New(l);
 
   for (i=0, d = a->declarators(); d; d = (Declarator*)d->next(), ++i) {
-    if (pragmas) {
-      tmp1 = pragmasToList(d->pragmas());
-      tmp2 = PySequence_Concat(pragmas, tmp1);
-      Py_DECREF(tmp1);
-      Py_DECREF(pragmas);
-      pragmas = tmp2;
-    }
-    else
-      pragmas = pragmasToList(d->pragmas());
-
-    if (comments) {
-      tmp1 = commentsToList(d->comments());
-      tmp2 = PySequence_Concat(comments, tmp1);
-      Py_DECREF(tmp1);
-      Py_DECREF(comments);
-      comments = tmp2;
-    }
-    else
-      comments = commentsToList(d->comments());
-
-    PyList_SetItem(pyidentifiers, i, PyString_FromString(d->identifier()));    
-  }
-
-  if (pragmas) {
-    tmp1 = pragmasToList(a->pragmas());
-    tmp2 = PySequence_Concat(pragmas, tmp1);
-    Py_DECREF(tmp1);
-    Py_DECREF(pragmas);
-    pragmas = tmp2;
-  }
-  else
-    pragmas = pragmasToList(a->pragmas());
-
-  if (comments) {
-    tmp1 = commentsToList(a->comments());
-    tmp2 = PySequence_Concat(comments, tmp1);
-    Py_DECREF(tmp1);
-    Py_DECREF(comments);
-    comments = tmp2;
+    d->accept(*this);
+    PyList_SetItem(pydeclarators, i, result_);
   }
-  else
-    comments = commentsToList(a->comments());
-
   result_ = PyObject_CallMethod(idlast_, (char*)"Attribute", (char*)"siiNNiNN",
 				a->file(), a->line(), (int)a->mainFile(),
-				pragmas,
-				comments,
+				pragmasToList(a->pragmas()),
+				commentsToList(a->comments()),
 				(int)a->readonly(), pyattrType,
-				pyidentifiers);
+				pydeclarators);
   ASSERT_RESULT;
 }
 
@@ -939,14 +910,18 @@
     PyList_SetItem(pycontexts, i, PyString_FromString(c->context()));
 
   result_ =
-    PyObject_CallMethod(idlast_,(char*)"Operation",(char*)"siiNNiNsNNN",
+    PyObject_CallMethod(idlast_,(char*)"Operation",(char*)"siiNNiNsNsNNN",
 			o->file(), o->line(), (int)o->mainFile(),
 			pragmasToList(o->pragmas()),
 			commentsToList(o->comments()),
 			(int)o->oneway(), pyreturnType,
-			o->identifier(), pyparameters,
+			o->identifier(),
+			scopedNameToList(o->scopedName()),
+			o->repoId(),
+			pyparameters,
 			pyraises, pycontexts);
   ASSERT_RESULT;
+  registerPyDecl(o->scopedName(), result_);
 }
 
 void
@@ -1351,13 +1326,91 @@
     Py_INCREF(Py_None); return Py_None;
   }
 
+  static PyObject* IdlPyRelativeScopedName(PyObject* self, PyObject* args)
+  {
+    PyObject *pyfrom, *pyto;
+    if (!PyArg_ParseTuple(args, (char*)"OO", &pyfrom, &pyto)) return 0;
+
+    if (!PySequence_Check(pyfrom) || !PySequence_Check(pyto)) {
+      PyErr_SetString(PyExc_TypeError,
+		      (char*)"Both arguments must be sequences of strings");
+      return 0;
+    }
+
+    if (PyObject_Length(pyto) == 0) {
+      PyErr_SetString(PyExc_TypeError,
+		      (char*)"Argument 2 must be a non-empty sequence");
+      return 0;
+    }
+
+    ScopedName* from = 0;
+    ScopedName* to   = 0;
+
+    int i;
+    // Convert lists to absolute ScopedNames
+    for (i=0; i < PyObject_Length(pyfrom); i++) {
+      PyObject* tmp = PySequence_GetItem(pyfrom, i);
+
+      if (!PyString_Check(tmp)) {
+	if (from) delete from;
+	PyErr_SetString(PyExc_TypeError,
+			(char*)"Both arguments must be sequences of strings");
+	return 0;
+      }
+      if (from)
+	from->append(PyString_AsString(tmp));
+      else
+	from = new ScopedName(PyString_AsString(tmp), 1);
+    }
+
+    for (i=0; i < PyObject_Length(pyto); i++) {
+      PyObject* tmp = PySequence_GetItem(pyto, i);
+
+      if (!PyString_Check(tmp)) {
+	if (from) delete from;
+	if (to)   delete to;
+	PyErr_SetString(PyExc_TypeError,
+			(char*)"Both arguments must be sequences of strings");
+	return 0;
+      }
+      if (to)
+	to->append(PyString_AsString(tmp));
+      else
+	to = new ScopedName(PyString_AsString(tmp), 1);
+    }
+
+    ScopedName* result = Scope::relativeScopedName(from, to);
+
+    if (from) delete from;
+    delete to;
+
+    if (result) {
+      PyObject* pyresult = PythonVisitor::scopedNameToList(result);
+      if (result->absolute())
+	PyList_Insert(pyresult, 0, Py_None);
+      delete result;
+      return pyresult;
+    }
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+
+  static PyObject* IdlPyRunInteractiveLoop(PyObject* self, PyObject* args)
+  {
+    PyRun_InteractiveLoop(stdin, (char*)"<stdin>");
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+
   static PyMethodDef omniidl_methods[] = {
-    {(char*)"compile",          IdlPyCompile,          METH_VARARGS},
-    {(char*)"clear",            IdlPyClear,            METH_VARARGS},
-    {(char*)"dump",             IdlPyDump,             METH_VARARGS},
-    {(char*)"quiet",            IdlPyQuiet,            METH_VARARGS},
-    {(char*)"noForwardWarning", IdlPyNoForwardWarning, METH_VARARGS},
-    {(char*)"keepComments",     IdlPyKeepComments,     METH_VARARGS},
+    {(char*)"compile",            IdlPyCompile,            METH_VARARGS},
+    {(char*)"clear",              IdlPyClear,              METH_VARARGS},
+    {(char*)"dump",               IdlPyDump,               METH_VARARGS},
+    {(char*)"quiet",              IdlPyQuiet,              METH_VARARGS},
+    {(char*)"noForwardWarning",   IdlPyNoForwardWarning,   METH_VARARGS},
+    {(char*)"keepComments",       IdlPyKeepComments,       METH_VARARGS},
+    {(char*)"relativeScopedName", IdlPyRelativeScopedName, METH_VARARGS},
+    {(char*)"runInteractiveLoop", IdlPyRunInteractiveLoop, METH_VARARGS},
     {NULL, NULL}
   };
 
Index: omniidl/cxx/idlrepoId.cc
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/idlrepoId.cc,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- omniidl/cxx/idlrepoId.cc	2000/03/03 17:41:38	1.5
+++ omniidl/cxx/idlrepoId.cc	2000/08/29 10:20:24	1.5.2.1
@@ -26,10 +26,10 @@
 //   
 //   Implementation of repoId management
 
-// $Id: idlrepoId.cc,v 1.5 2000/03/03 17:41:38 dpg1 Exp $
+// $Id: idlrepoId.cc,v 1.5.2.1 2000/08/29 10:20:24 dpg1 Exp $
 // $Log: idlrepoId.cc,v $
-// Revision 1.5  2000/03/03 17:41:38  dpg1
-// Major reorganisation to support omniORB 3.0 as well as 2.8.
+// Revision 1.5.2.1  2000/08/29 10:20:24  dpg1
+// Operations and attributes now have repository ids.
 //
 // Revision 1.3  1999/11/08 10:50:47  dpg1
 // Change to behaviour when files end inside a scope.
@@ -293,7 +293,7 @@
   void visitUnionCase    (UnionCase* d)    { error(d); }
   void visitEnumerator   (Enumerator* d)   { error(d); }
   void visitAttribute    (Attribute* d)    { error(d); }
-  void visitOperation    (Operation* d)    { error(d); }
+  void visitOperation    (Operation* d)    { d->setRepoId(r_, f_, l_); }
   void visitStateMember  (StateMember* d)  { error(d); }
   void visitFactory      (Factory* d)      { error(d); }
 
@@ -341,7 +341,7 @@
   void visitUnionCase    (UnionCase* d)    { error(d); }
   void visitEnumerator   (Enumerator* d)   { error(d); }
   void visitAttribute    (Attribute* d)    { error(d); }
-  void visitOperation    (Operation* d)    { error(d); }
+  void visitOperation    (Operation* d)    { d->setVersion(a_, i_, f_, l_); }
   void visitStateMember  (StateMember* d)  { error(d); }
   void visitFactory      (Factory* d)      { error(d); }
 
Index: omniidl/cxx/idlscope.cc
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/idlscope.cc,v
retrieving revision 1.13.2.3
retrieving revision 1.13.2.6
diff -u -r1.13.2.3 -r1.13.2.6
--- omniidl/cxx/idlscope.cc	2000/08/04 09:19:02	1.13.2.3
+++ omniidl/cxx/idlscope.cc	2000/09/19 09:25:20	1.13.2.6
@@ -26,10 +26,18 @@
 //   
 //   Scope manipulation
 
-// $Id: idlscope.cc,v 1.13.2.3 2000/08/04 09:19:02 dpg1 Exp $
+// $Id: idlscope.cc,v 1.13.2.6 2000/09/19 09:25:20 dpg1 Exp $
 // $Log: idlscope.cc,v $
-// Revision 1.13.2.3  2000/08/04 09:19:02  dpg1
-// Fix look-up of escaped identifiers broken on 19 July. (Bug 14.)
+// Revision 1.13.2.6  2000/09/19 09:25:20  dpg1
+// Rename Scope::Entry::Kind to Scope::Entry::EntryKind to avoid compiler
+// bugs.
+//
+// Revision 1.13.2.5  2000/08/29 15:20:28  dpg1
+// New relativeScope() function. New -i flag to enter interactive loop
+// after parsing
+//
+// Revision 1.13.2.4  2000/08/24 11:33:00  dpg1
+// Typo in error message % format string
 //
 // Revision 1.11.2.3  2000/08/04 09:10:27  dpg1
 // Fix look-up of escaped identifiers broken on 19 July. (Bug 14.)
@@ -86,8 +94,8 @@
 #include <string.h>
 
 // Global Scope pointers
-Scope* Scope::global_;
-Scope* Scope::current_;
+Scope* Scope::global_  = 0;
+Scope* Scope::current_ = 0;
 
 // ScopedName implementation
 ScopedName::
@@ -103,13 +111,23 @@
 ScopedName(const ScopedName* sn) :
   scopeList_(0), last_(0), absolute_(sn->absolute())
 {
-  Fragment *f, *g;
+  const Fragment *f;
 
   for (f = sn->scopeList(); f; f = f->next())
     append(f->identifier());
 }
 
+ScopedName::
+ScopedName(const ScopedName::Fragment* frags, _CORBA_Boolean absolute) :
+  scopeList_(0), last_(0), absolute_(absolute)
+{
+  const Fragment *f;
+
+  for (f = frags; f; f = f->next())
+    append(f->identifier());
+}
 
+
 ScopedName::
 ~ScopedName()
 {
@@ -199,7 +217,7 @@
 
 Scope::
 Entry::
-Entry(const Scope* container, Kind k, const char* identifier,
+Entry(const Scope* container, EntryKind k, const char* identifier,
       Scope* scope, Decl* decl, IdlType* idltype,
       Scope::Entry* inh_from, const char* file, int line)
 
@@ -642,16 +660,18 @@
 
 	if (el->tail()) {
 	  // Error -- ambiguous
-	  char* ssn = sn->toString();
-	  IdlError(file, line, "Ambiguous name `%s':", ssn);
-	  delete [] ssn;
-
-	  for (; el; el = el->tail()) {
-	    char* ssn=el->head()->container()->scopedName()->toString();
-	    IdlErrorCont(el->head()->file(), el->head()->line(),
-			 "(`%s' defined in `%s')",
-			 el->head()->identifier(), ssn);
+	  if (file) {
+	    char* ssn = sn->toString();
+	    IdlError(file, line, "Ambiguous name `%s':", ssn);
 	    delete [] ssn;
+
+	    for (; el; el = el->tail()) {
+	      char* ssn = el->head()->container()->scopedName()->toString();
+	      IdlErrorCont(el->head()->file(), el->head()->line(),
+			   "(`%s' defined in `%s')",
+			   el->head()->identifier(), ssn);
+	      delete [] ssn;
+	    }
 	  }
 	  delete el;
 	  return 0;
@@ -663,22 +683,26 @@
     top_component = 0;
 
     if (!e) {
-      char* ssn = sn->toString();
-      IdlError(file, line, "Error in look-up of `%s': `%s' not found",
-	       ssn, fid);
-      delete [] ssn;
+      if (file) {
+	char* ssn = sn->toString();
+	IdlError(file, line, "Error in look-up of `%s': `%s' not found",
+		 ssn, fid);
+	delete [] ssn;
+      }
       return 0;
     }
 
     if (strcmp(fid, e->identifier())) {
       // Case clash
-      char* ssn = sn->toString();
-      IdlError(file, line, "Error in look-up of `%s': `%s' differs in case",
-	       ssn, fid);
-      delete [] ssn;
-      ssn = e->scopedName()->toString();
-      IdlErrorCont(e->file(), e->line(), "from `%s' declared here", ssn);
-      delete [] ssn;
+      if (file) {
+	char* ssn = sn->toString();
+	IdlError(file, line, "Error in look-up of `%s': `%s' differs in case",
+		 ssn, fid);
+	delete [] ssn;
+	ssn = e->scopedName()->toString();
+	IdlErrorCont(e->file(), e->line(), "from `%s' declared here", ssn);
+	delete [] ssn;
+      }
       return 0;
     }
 
@@ -687,13 +711,15 @@
       s = e->scope();
 
       if (!s) {
-	char* ssn = sn->toString();
-	IdlError(file, line,
-		 "Error in look-up of `%s': `%s' does not form a scope",
-		 ssn, e->identifier());
-	IdlErrorCont(e->file(), e->line(), "(`%s' defined here)",
-		     e->identifier());
-	delete [] ssn;
+	if (file) {
+	  char* ssn = sn->toString();
+	  IdlError(file, line,
+		   "Error in look-up of `%s': `%s' does not form a scope",
+		   ssn, e->identifier());
+	  IdlErrorCont(e->file(), e->line(), "(`%s' defined here)",
+		       e->identifier());
+	  delete [] ssn;
+	}
 	return 0;
       }
     }
@@ -712,6 +738,68 @@
 }
 
 
+static ScopedName*
+findRelativeScope(const ScopedName::Fragment* from,
+		  const ScopedName::Fragment* to,
+		  const Scope* fromScope,
+		  const Scope::Entry* target)
+{
+  ScopedName* result = 0;
+
+  if (!to)
+    return 0;
+
+  if (from && !strcmp(from->identifier(), to->identifier())) {
+    // Top name components match -- recursively try next components
+    result = findRelativeScope(from->next(), to->next(), fromScope, target);
+  }
+
+  if (!result) {
+    ScopedName*         test = new ScopedName(to, 0);
+    const Scope::Entry* find = fromScope->findScopedName(test);
+
+    if (find == target)
+      result = test;
+    else
+      delete test;
+  }
+  return result;
+}
+
+ScopedName*
+Scope::relativeScopedName(const ScopedName* from, const ScopedName* to)
+{
+  if (!global_) {
+    // Haven't parsed any IDL yet!
+    return 0;
+  }
+
+  if ((from && !from->absolute()) || !to->absolute())
+    return 0;
+
+  const Scope* fromScope;
+
+  if (from) {
+    const Entry* fromEntry = global_->findScopedName(from);
+    if (!fromEntry) return 0;
+    fromScope = fromEntry->scope();
+  }
+  else
+    fromScope = global_;
+
+  const Entry* toEntry = global_->findScopedName(to);
+  if (!toEntry) return 0;
+
+  ScopedName* result = findRelativeScope(from ? from->scopeList() : 0,
+					 to->scopeList(), fromScope, toEntry);
+
+  if (!result)
+    result = new ScopedName(to);
+
+  return result;
+}
+
+
 // Entry adding functions
 
 void
@@ -928,7 +1016,7 @@
       {
 	IdlError(file, line,
 		 "Declaration of %s `%s' clashes with earlier declaration "
-		 "of %2 `%s'", decl->kindAsString(), identifier,
+		 "of %s `%s'", decl->kindAsString(), identifier,
 		 clash->decl()->kindAsString(), clash->identifier());
 	IdlErrorCont(clash->file(), clash->line(), "(%s `%s' declared here)",
 		     clash->decl()->kindAsString(), clash->identifier());
Index: omniidl/cxx/idlscope.h
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/idlscope.h,v
retrieving revision 1.5
retrieving revision 1.5.2.2
diff -u -r1.5 -r1.5.2.2
--- omniidl/cxx/idlscope.h	2000/03/03 17:41:38	1.5
+++ omniidl/cxx/idlscope.h	2000/09/19 09:25:20	1.5.2.2
@@ -26,8 +26,16 @@
 //   
 //   Definitions for scope manipulation
 
-// $Id: idlscope.h,v 1.5 2000/03/03 17:41:38 dpg1 Exp $
+// $Id: idlscope.h,v 1.5.2.2 2000/09/19 09:25:20 dpg1 Exp $
 // $Log: idlscope.h,v $
+// Revision 1.5.2.2  2000/09/19 09:25:20  dpg1
+// Rename Scope::Entry::Kind to Scope::Entry::EntryKind to avoid compiler
+// bugs.
+//
+// Revision 1.5.2.1  2000/08/29 15:20:28  dpg1
+// New relativeScope() function. New -i flag to enter interactive loop
+// after parsing
+//
 // Revision 1.5  2000/03/03 17:41:38  dpg1
 // Major reorganisation to support omniORB 3.0 as well as 2.8.
 //
@@ -61,8 +69,8 @@
       delete [] identifier_;
     }
 
-    inline const char* identifier() { return identifier_; }
-    inline Fragment*   next()       { return next_; };
+    inline const char* identifier() const { return identifier_; }
+    inline Fragment*   next()       const { return next_; };
 
   protected:
     Fragment* next_;
@@ -75,8 +83,9 @@
 
   ScopedName(const char* identifier, _CORBA_Boolean absolute);
 
-  // Copy constructor
+  // Copy constructors
   ScopedName(const ScopedName* sn);
+  ScopedName(const Fragment*   frags, _CORBA_Boolean absolute);
 
   ~ScopedName();
 
@@ -182,9 +191,10 @@
   EntryList* iFindWithInheritance(const char* identifier) const;
 
   // Find an entry based on a ScopedName. File and line requesting the
-  // find are given so errors can be reported nicely.
+  // find are given so errors can be reported nicely. If file and line
+  // are zero, do not report errors.
   const Entry* findScopedName(const ScopedName* sn,
-			      const char* file, int line) const;
+			      const char* file = 0, int line = 0) const;
 
   // Find an entry based on a ScopedName, and mark it as used in this
   // scope (and any parent scopes with nestedUse true).
@@ -192,6 +202,13 @@
 
   void addUse(const ScopedName* sn, const char* file, int line);
 
+  // Given source and destination ScopedNames, construct a relative or
+  // absolute ScopedName which uniquely identifies the destination
+  // from within the scope of the source. Returns 0 if either scoped
+  // name does not exist, or is not absolute.
+  static ScopedName* relativeScopedName(const ScopedName* from,
+					const ScopedName* to);
+
 
   // The following add functions take identifiers with _ escape
   // characters intact, so they can properly detect clashes with
@@ -231,7 +248,7 @@
   class Entry {
   public:
 
-    enum Kind {
+    enum EntryKind {
       E_MODULE,			// Module
       E_DECL,			// Declaration
       E_CALLABLE,		// Operation or attribute
@@ -241,14 +258,14 @@
       E_PARENT			// Name of enclosing scope
     };
 
-    Entry(const Scope* container, Kind kind, const char* identifier,
+    Entry(const Scope* container, EntryKind kind, const char* identifier,
 	  Scope* scope, Decl* decl, IdlType* idltype, Entry* inh_from,
 	  const char* file, int line);
 
     ~Entry();
 
     const Scope*      container()  const { return container_; }
-    Kind              kind()       const { return kind_; }
+    EntryKind         kind()       const { return kind_; }
     const char*       identifier() const { return identifier_; }
     const ScopedName* scopedName() const { return scopedName_; }
     const char*       file()       const { return file_; }
@@ -266,7 +283,7 @@
 
   private:
     const Scope*      container_;
-    Kind              kind_;
+    EntryKind         kind_;
     char*             identifier_;
     ScopedName*       scopedName_;
     Scope*            scope_;
Index: omniidl/cxx/idlutil.cc
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/idlutil.cc,v
retrieving revision 1.5.2.1
retrieving revision 1.5.2.2
diff -u -r1.5.2.1 -r1.5.2.2
--- omniidl/cxx/idlutil.cc	2000/08/21 09:10:48	1.5.2.1
+++ omniidl/cxx/idlutil.cc	2000/09/26 13:24:59	1.5.2.2
@@ -26,8 +26,11 @@
 //   
 //   Utility functions
 
-// $Id: idlutil.cc,v 1.5.2.1 2000/08/21 09:10:48 dpg1 Exp $
+// $Id: idlutil.cc,v 1.5.2.2 2000/09/26 13:24:59 dpg1 Exp $
 // $Log: idlutil.cc,v $
+// Revision 1.5.2.2  2000/09/26 13:24:59  dpg1
+// Missed some omniidl updates from omniORB 3
+//
 // Revision 1.5.2.1  2000/08/21 09:10:48  dpg1
 // Merge omniidl long long support from omniORB 3
 //
@@ -45,6 +48,8 @@
 //
 
 #include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
 #include <idlutil.h>
 
 char* idl_strdup(const char* s)
@@ -116,7 +121,7 @@
 
 #ifdef HAS_LongLong
 
-#  ifdef __WIN32__
+#  if defined(__WIN32__)
 
 IdlIntLiteral
 idl_strtoul(const char* text, int base)
@@ -136,6 +141,14 @@
     abort();
   }
   return ull;
+}
+
+#  elif defined(__osf1__)
+
+IdlIntLiteral
+idl_strtoul(const char* text, int base)
+{
+  return strtoul(text, 0, base);
 }
 
 #  else
Index: omniidl/cxx/lex.yy.cc
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/lex.yy.cc,v
retrieving revision 1.18.2.1
retrieving revision 1.18.2.2
diff -u -r1.18.2.1 -r1.18.2.2
--- omniidl/cxx/lex.yy.cc	2000/08/21 09:10:48	1.18.2.1
+++ omniidl/cxx/lex.yy.cc	2000/08/29 10:20:24	1.18.2.2
@@ -1,7 +1,7 @@
 /* A lexical scanner generated by flex */
 
 /* Scanner skeleton version:
- * $Header: /cvsroot/omniORBpy/omniidl/cxx/lex.yy.cc,v 1.18.2.1 2000/08/21 09:10:48 dpg1 Exp $
+ * $Header: /cvsroot/omniORBpy/omniidl/cxx/lex.yy.cc,v 1.18.2.2 2000/08/29 10:20:24 dpg1 Exp $
  */
 
 #define FLEX_SCANNER
@@ -803,9 +803,9 @@
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 1 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 #define INITIAL 0
-#line 2 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 2 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 //                          Package   : omniidl
 // idl.ll                   Created on: 1999/10/05
 //			    Author    : Duncan Grisby (dpg1)
@@ -833,12 +833,15 @@
 //   
 //   Flex lexical analyser
 
-// $Id: lex.yy.cc,v 1.18.2.1 2000/08/21 09:10:48 dpg1 Exp $
+// $Id: lex.yy.cc,v 1.18.2.2 2000/08/29 10:20:24 dpg1 Exp $
 // $Log: lex.yy.cc,v $
-// Revision 1.18.2.1  2000/08/21 09:10:48  dpg1
-// Merge omniidl long long support from omniORB 3
+// Revision 1.18.2.2  2000/08/29 10:20:24  dpg1
+// Operations and attributes now have repository ids.
 //
-// Revision 1.18  2000/06/09 11:20:47  dpg1
+// Revision 1.7.2.8  2000/08/07 15:34:35  dpg1
+// Partial back-port of long long from omni3_1_develop.
+//
+// Revision 1.7.2.7  2000/06/09 11:20:47  dpg1
 // Last fix put __omni_pragma line numbers off by one...
 //
 // Revision 1.7.2.6  2000/06/08 14:58:19  dpg1
@@ -1079,7 +1082,7 @@
 	register char *yy_cp = NULL, *yy_bp = NULL;
 	register int yy_act;
 
-#line 136 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 142 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 
 
 
@@ -1175,257 +1178,257 @@
 	{ /* beginning of action switch */
 case 1:
 YY_RULE_SETUP
-#line 138 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 144 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return ABSTRACT;
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 139 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 145 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return ANY;
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 140 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 146 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return ATTRIBUTE;
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 141 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 147 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return BOOLEAN;
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 142 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 148 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return CASE;
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 143 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 149 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return CHAR;
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 144 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 150 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return CONST;
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 145 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 151 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return CONTEXT;
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 146 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 152 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return CUSTOM;
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 147 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 153 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return DEFAULT;
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 148 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 154 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return DOUBLE;
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 149 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 155 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return ENUM;
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 150 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 156 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return EXCEPTION;
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 151 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 157 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return FACTORY;
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 152 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 158 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return FALSE_;
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 153 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 159 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return FIXED;
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 154 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 160 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return FLOAT;
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 155 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 161 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return IN;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 156 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 162 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return INOUT;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 157 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 163 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return INTERFACE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 158 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 164 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return LONG;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 159 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 165 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return MODULE;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 160 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 166 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return NATIVE;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 161 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 167 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return OBJECT;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 162 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 168 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return OCTET;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 163 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 169 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return ONEWAY;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 164 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 170 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return OUT;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 165 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 171 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return PRIVATE;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 166 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 172 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return PUBLIC;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 167 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 173 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return RAISES;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 168 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 174 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return READONLY;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 169 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 175 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return SEQUENCE;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 170 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 176 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return SHORT;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 171 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 177 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return STRING;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 172 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 178 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return STRUCT;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 173 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 179 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return SUPPORTS;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 174 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 180 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return SWITCH;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 175 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 181 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return TRUE_;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 176 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 182 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return TRUNCATABLE;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 177 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 183 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return TYPEDEF;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 178 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 184 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return UNION;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 179 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 185 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return UNSIGNED;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 180 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 186 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return VALUEBASE;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 181 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 187 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return VALUETYPE;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 182 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 188 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return VOID;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 183 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 189 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return WCHAR;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 184 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 190 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return WSTRING;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 186 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 192 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return LEFT_SHIFT;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 187 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 193 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return RIGHT_SHIFT;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 188 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 194 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 return SCOPE_DELIM;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 190 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 196 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.id_val = idl_strdup(yytext);
   return IDENTIFIER;
@@ -1433,7 +1436,7 @@
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 195 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 201 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.id_val = idl_strdup(yytext);
   return IDENTIFIER;
@@ -1441,7 +1444,7 @@
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 200 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 206 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   errno = 0;
   yylval.int_literal_val = idl_strtoul(yytext, 10);
@@ -1454,7 +1457,7 @@
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 214 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 216 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   errno = 0;
   yylval.int_literal_val = idl_strtoul(yytext, 8);
@@ -1467,7 +1470,7 @@
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 228 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 226 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   errno = 0;
   yylval.int_literal_val = idl_strtoul(yytext, 16);
@@ -1480,7 +1483,7 @@
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 242 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 236 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.int_literal_val = 0;
   return INTEGER_LITERAL;
@@ -1488,7 +1491,7 @@
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 247 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 241 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.char_val = yytext[1];
   return CHARACTER_LITERAL;
@@ -1496,7 +1499,7 @@
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 252 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 246 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.char_val = octalToChar(yytext + 1);
@@ -1505,7 +1508,7 @@
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 258 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 252 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.char_val = hexToChar(yytext + 1);
@@ -1514,7 +1517,7 @@
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 264 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 258 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   IdlError(currentFile, yylineno,
 	   "\\u may only be used in wide characters and strings");
@@ -1524,7 +1527,7 @@
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 271 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 265 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.char_val = escapeToChar(yytext + 1);
@@ -1533,7 +1536,7 @@
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 277 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 271 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.wchar_val = yytext[2];
   return WIDE_CHARACTER_LITERAL;
@@ -1541,7 +1544,7 @@
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 282 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 276 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.wchar_val = octalToWChar(yytext + 2);
@@ -1550,7 +1553,7 @@
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 288 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 282 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.wchar_val = hexToWChar(yytext + 2);
@@ -1559,7 +1562,7 @@
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 294 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 288 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.wchar_val = hexToWChar(yytext + 2);
@@ -1568,7 +1571,7 @@
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 300 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 294 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.wchar_val = escapeToWChar(yytext + 2);
@@ -1577,7 +1580,7 @@
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 306 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 300 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   // Only deal with floats in INITIAL state, so version pragmas don't
   // get interpreted as floats.
@@ -1587,7 +1590,7 @@
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 313 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 307 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.float_literal_val = idl_strtod(yytext);
   return FLOATING_PT_LITERAL;
@@ -1595,7 +1598,7 @@
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 312 "/local/dpg1/omni/31/src/tool/omniidl/cxx/idl.ll"
+#line 312 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.float_literal_val = idl_strtod(yytext);
   return FLOATING_PT_LITERAL;
@@ -1603,7 +1606,7 @@
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 323 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 317 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.string_val = escapedStringToString(yytext + 1);
@@ -1612,7 +1615,7 @@
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 329 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 323 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yytext[yyleng-1] = '\0';
   yylval.wstring_val = escapedStringToWString(yytext + 1);
@@ -1621,7 +1624,7 @@
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 335 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 329 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.fixed_val = fixed(yytext);
   return FIXED_PT_LITERAL;
@@ -1629,7 +1632,7 @@
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 340 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 334 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.fixed_val = fixed(yytext);
   return FIXED_PT_LITERAL;
@@ -1637,7 +1640,7 @@
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 345 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 339 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.fixed_val = fixed(yytext);
   return FIXED_PT_LITERAL;
@@ -1645,12 +1648,12 @@
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 350 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 344 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 { Comment::add(yytext, currentFile, yylineno-1); }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 352 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 346 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   Comment::add(yytext, currentFile, yylineno);
   BEGIN(comment);
@@ -1658,27 +1661,27 @@
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 357 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 351 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 { Comment::append(yytext); }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 358 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 352 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 { Comment::append(yytext); }
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 359 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 353 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 { Comment::append(yytext); }
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 360 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 354 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 { Comment::append(yytext); BEGIN(INITIAL); }
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 362 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 356 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   BEGIN(omni_pragma);
   return OMNI_PRAGMA;
@@ -1686,7 +1689,7 @@
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 367 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 361 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   BEGIN(INITIAL);
   return END_PRAGMA;
@@ -1694,7 +1697,7 @@
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 372 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 366 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.string_val = idl_strdup(yytext);
   return UNKNOWN_PRAGMA_BODY;
@@ -1702,7 +1705,7 @@
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 376 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 370 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.string_val = idl_strdup(yytext);
   return UNKNOWN_PRAGMA_BODY;
@@ -1710,7 +1713,7 @@
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 382 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 376 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   BEGIN(known_pragma);
   return PRAGMA_PREFIX;
@@ -1718,7 +1721,7 @@
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 387 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 381 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   BEGIN(known_pragma);
   return PRAGMA_ID;
@@ -1726,7 +1729,7 @@
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 392 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 386 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   BEGIN(known_pragma);
   return PRAGMA_VERSION;
@@ -1734,12 +1737,12 @@
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 397 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 391 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 { /* Eat spaces and tabs */ }
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 399 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 393 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   BEGIN(unknown_pragma);
   return PRAGMA;
@@ -1747,7 +1750,7 @@
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 404 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 398 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   yylval.string_val = idl_strdup(yytext);
   return UNKNOWN_PRAGMA_BODY;
@@ -1755,14 +1758,14 @@
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 409 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 403 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   /* Continue line if it ends with \ */
 }
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 413 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 407 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   BEGIN(INITIAL);
   return END_PRAGMA;
@@ -1770,40 +1773,40 @@
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 418 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 412 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   parseLineDirective(yytext);
 }
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 422 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 416 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   parseLineDirective(yytext);
 }
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 426 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 420 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   parseLineDirective(yytext);
 }
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 430 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 424 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 { /* Eat white space */ }
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 432 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 426 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 {
   return yytext[0];
 }
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 436 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 430 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 ECHO;
 	YY_BREAK
 			case YY_STATE_EOF(INITIAL):
@@ -2695,7 +2698,7 @@
 	return 0;
 	}
 #endif
-#line 436 "/home/dpg1/omni/cvs/ins/omni/src/tool/omniidl/cxx/idl.ll"
+#line 430 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.ll"
 
 
 char octalToChar(char* s) {
@@ -2921,5 +2924,5 @@
 #ifdef __VMS
 // Some versions of DEC C++ for OpenVMS set the module name used by the
 // librarian based on the last #line encountered.
-#line 2929 "lex_yy.cc"
+#line 2923 "lex_yy.cc"
 #endif
Index: omniidl/cxx/y.tab.cc
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/y.tab.cc,v
retrieving revision 1.13.2.1
retrieving revision 1.13.2.2
diff -u -r1.13.2.1 -r1.13.2.2
--- omniidl/cxx/y.tab.cc	2000/08/01 11:27:44	1.13.2.1
+++ omniidl/cxx/y.tab.cc	2000/08/29 10:20:25	1.13.2.2
@@ -70,7 +70,7 @@
 #define	LEFT_SHIFT	320
 #define	RIGHT_SHIFT	321
 
-#line 73 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 76 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 
 
 #include <stdlib.h>
@@ -110,7 +110,7 @@
 #endif
 
 
-#line 113 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 116 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 typedef union {
   char*                    id_val;
   int                      int_val;
@@ -346,37 +346,37 @@
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   377,   379,   385,   387,   393,   395,   396,   397,   398,   399,
-   400,   401,   402,   408,   413,   416,   420,   428,   432,   434,
-   437,   442,   445,   449,   457,   463,   470,   472,   475,   479,
-   481,   487,   489,   490,   491,   492,   493,   494,   500,   502,
-   505,   509,   513,   521,   528,   532,   536,   539,   549,   551,
-   552,   553,   556,   560,   565,   573,   576,   581,   585,   590,
-   602,   609,   615,   620,   623,   628,   632,   635,   640,   647,
-   649,   652,   656,   666,   670,   672,   678,   680,   681,   684,
-   692,   694,   697,   700,   704,   706,   714,   720,   722,   725,
-   727,   733,   741,   747,   749,   750,   751,   752,   753,   754,
-   755,   756,   759,   762,   766,   768,   771,   773,   776,   778,
-   783,   785,   788,   793,   795,   796,   799,   801,   804,   807,
-   812,   818,   821,   823,   824,   827,   831,   832,   835,   839,
-   842,   845,   848,   851,   854,   857,   862,   864,   873,   875,
-   884,   886,   889,   897,   899,   900,   901,   902,   907,   915,
-   917,   920,   922,   923,   928,   930,   931,   932,   933,   934,
-   935,   936,   937,   940,   942,   943,   944,   947,   949,   950,
-   953,   955,   961,   963,   966,   972,   976,   978,   979,   982,
-   984,   987,   989,   990,   993,   997,  1001,  1005,  1007,  1008,
-  1011,  1015,  1019,  1023,  1027,  1031,  1035,  1039,  1043,  1047,
-  1052,  1060,  1066,  1068,  1074,  1080,  1087,  1096,  1104,  1110,
-  1112,  1113,  1114,  1115,  1121,  1125,  1127,  1133,  1140,  1142,
-  1148,  1152,  1157,  1164,  1169,  1176,  1182,  1184,  1190,  1196,
-  1200,  1205,  1207,  1212,  1214,  1219,  1225,  1227,  1233,  1237,
-  1243,  1245,  1248,  1250,  1256,  1261,  1269,  1275,  1277,  1283,
-  1286,  1290,  1299,  1305,  1307,  1310,  1314,  1316,  1319,  1321,
-  1322,  1329,  1331,  1337,  1343,  1345,  1346,  1349,  1351,  1354,
-  1358,  1362,  1368,  1370,  1373,  1377,  1381,  1387,  1389,  1390,
-  1391,  1396,  1403,  1410,  1414,  1416,  1417,  1418,  1421,  1423,
-  1426,  1428,  1431,  1435,  1440,  1445,  1450,  1455,  1460,  1466,
-  1472,  1474
+   380,   382,   388,   390,   396,   398,   399,   400,   401,   402,
+   403,   404,   405,   411,   416,   419,   423,   431,   435,   437,
+   440,   445,   448,   452,   460,   466,   473,   475,   478,   482,
+   484,   490,   492,   493,   494,   495,   496,   497,   503,   505,
+   508,   512,   516,   524,   531,   535,   539,   542,   552,   554,
+   555,   556,   559,   563,   568,   576,   579,   584,   588,   593,
+   605,   612,   618,   623,   626,   631,   635,   638,   643,   650,
+   652,   655,   659,   669,   673,   675,   681,   683,   684,   687,
+   695,   697,   700,   703,   707,   709,   717,   723,   725,   728,
+   730,   736,   744,   750,   752,   753,   754,   755,   756,   757,
+   758,   759,   762,   765,   769,   771,   774,   776,   779,   781,
+   786,   788,   791,   796,   798,   799,   802,   804,   807,   810,
+   815,   821,   824,   826,   827,   830,   834,   835,   838,   842,
+   845,   848,   851,   854,   857,   860,   865,   867,   876,   878,
+   887,   889,   892,   900,   902,   903,   904,   905,   910,   918,
+   920,   923,   925,   926,   931,   933,   934,   935,   936,   937,
+   938,   939,   940,   943,   945,   946,   947,   950,   952,   953,
+   956,   958,   964,   966,   969,   975,   979,   981,   982,   985,
+   987,   990,   992,   993,   996,  1000,  1004,  1008,  1010,  1011,
+  1014,  1018,  1022,  1026,  1030,  1034,  1038,  1042,  1046,  1050,
+  1055,  1063,  1069,  1071,  1077,  1083,  1090,  1099,  1107,  1113,
+  1115,  1116,  1117,  1118,  1124,  1128,  1130,  1136,  1143,  1145,
+  1151,  1155,  1160,  1167,  1172,  1179,  1185,  1187,  1193,  1199,
+  1203,  1208,  1210,  1215,  1217,  1222,  1228,  1230,  1236,  1240,
+  1246,  1248,  1251,  1253,  1259,  1264,  1272,  1278,  1280,  1286,
+  1289,  1293,  1302,  1308,  1310,  1313,  1317,  1319,  1322,  1324,
+  1325,  1332,  1334,  1340,  1346,  1348,  1349,  1352,  1354,  1357,
+  1361,  1365,  1371,  1373,  1376,  1380,  1384,  1390,  1392,  1393,
+  1394,  1399,  1406,  1413,  1417,  1419,  1420,  1421,  1424,  1426,
+  1429,  1431,  1434,  1438,  1443,  1448,  1453,  1458,  1463,  1469,
+  1475,  1477
 };
 #endif
 
@@ -1474,89 +1474,89 @@
   switch (yyn) {
 
 case 1:
-#line 378 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 381 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = 0; ;
     break;}
 case 2:
-#line 379 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 382 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.decl_val = yyvsp[0].decl_val;
       AST::tree()->setDeclarations(yyvsp[0].decl_val);
     ;
     break;}
 case 3:
-#line 386 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 389 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].decl_val; ;
     break;}
 case 4:
-#line 387 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 390 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-1].decl_val) { yyvsp[-1].decl_val->append(yyvsp[0].decl_val); yyval.decl_val = yyvsp[-1].decl_val; }
       else yyval.decl_val = yyvsp[0].decl_val;
     ;
     break;}
 case 5:
-#line 394 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 397 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].decl_val; ;
     break;}
 case 6:
-#line 395 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 398 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].const_val; ;
     break;}
 case 7:
-#line 396 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 399 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].exception_val; ;
     break;}
 case 8:
-#line 397 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 400 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].decl_val; ;
     break;}
 case 9:
-#line 398 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 401 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].module_val; ;
     break;}
 case 10:
-#line 399 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 402 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].value_base_val; ;
     break;}
 case 11:
-#line 400 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 403 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = 0; ;
     break;}
 case 12:
-#line 401 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 404 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = 0; ;
     break;}
 case 13:
-#line 402 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 405 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno, "Syntax error in definition");
       yyval.decl_val = 0;
     ;
     break;}
 case 14:
-#line 409 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 412 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-4].module_val->finishConstruction(yyvsp[-1].decl_val);
       yyval.module_val = yyvsp[-4].module_val;
     ;
     break;}
 case 15:
-#line 413 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 416 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in module definition");
     ;
     break;}
 case 16:
-#line 416 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 419 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-5].module_val->finishConstruction(yyvsp[-1].decl_val);
       yyval.module_val = yyvsp[-5].module_val;
     ;
     break;}
 case 17:
-#line 420 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 423 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in module definition (no body found)");
@@ -1565,40 +1565,40 @@
     ;
     break;}
 case 18:
-#line 429 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 432 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.module_val = new Module(currentFile, yylineno, mainFile, yyvsp[0].id_val); ;
     break;}
 case 19:
-#line 433 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 436 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].interface_val; ;
     break;}
 case 20:
-#line 434 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 437 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].forward_val; ;
     break;}
 case 21:
-#line 438 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 441 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-3].interface_val->finishConstruction(yyvsp[-1].decl_val);
       yyval.interface_val = yyvsp[-3].interface_val;
     ;
     break;}
 case 22:
-#line 442 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 445 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in interface definition");
     ;
     break;}
 case 23:
-#line 445 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 448 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-5].interface_val->finishConstruction(yyvsp[-1].decl_val);
       yyval.interface_val = yyvsp[-5].interface_val;
     ;
     break;}
 case 24:
-#line 449 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 452 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in interface definition (no body found)");
@@ -1607,91 +1607,91 @@
     ;
     break;}
 case 25:
-#line 458 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 461 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.forward_val = new Forward(currentFile, yylineno, mainFile, yyvsp[0].id_val, yyvsp[-2].boolean_val);
     ;
     break;}
 case 26:
-#line 465 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 468 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.interface_val = new Interface(currentFile, yylineno, mainFile, yyvsp[-2].id_val, yyvsp[-4].boolean_val, yyvsp[0].inheritspec_val);
     ;
     break;}
 case 27:
-#line 471 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 474 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 0; ;
     break;}
 case 28:
-#line 472 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 475 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 1; ;
     break;}
 case 29:
-#line 476 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 479 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].decl_val; ;
     break;}
 case 30:
-#line 480 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 483 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = 0; ;
     break;}
 case 31:
-#line 481 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 484 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-1].decl_val) { yyvsp[-1].decl_val->append(yyvsp[0].decl_val); yyval.decl_val = yyvsp[-1].decl_val; }
       else yyval.decl_val = yyvsp[0].decl_val;
     ;
     break;}
 case 32:
-#line 488 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 491 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].decl_val; ;
     break;}
 case 33:
-#line 489 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 492 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].const_val; ;
     break;}
 case 34:
-#line 490 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 493 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].exception_val; ;
     break;}
 case 35:
-#line 491 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 494 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].attribute_val; ;
     break;}
 case 36:
-#line 492 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 495 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[-1].operation_val; ;
     break;}
 case 37:
-#line 493 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 496 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = 0; ;
     break;}
 case 38:
-#line 494 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 497 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno, "Syntax error in interface body");
       yyval.decl_val = 0;
     ;
     break;}
 case 39:
-#line 501 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 504 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.inheritspec_val = 0; ;
     break;}
 case 40:
-#line 502 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 505 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.inheritspec_val = yyvsp[0].inheritspec_val; ;
     break;}
 case 41:
-#line 506 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 509 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.inheritspec_val = yyvsp[0].inheritspec_val; ;
     break;}
 case 42:
-#line 510 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 513 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.inheritspec_val = new InheritSpec(yyvsp[-1].scopedname_val, currentFile, yylineno);
     ;
     break;}
 case 43:
-#line 513 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 516 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-4].inheritspec_val) {
 	yyvsp[-4].inheritspec_val->append(new InheritSpec(yyvsp[-1].scopedname_val, currentFile, yylineno),
@@ -1702,7 +1702,7 @@
     ;
     break;}
 case 44:
-#line 521 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 524 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in inheritance list");
@@ -1710,58 +1710,58 @@
     ;
     break;}
 case 45:
-#line 529 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 532 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.scopedname_val = yyvsp[0].scopedname_val; ;
     break;}
 case 46:
-#line 533 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 536 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.scopedname_val = new ScopedName(yyvsp[0].id_val, 0);
     ;
     break;}
 case 47:
-#line 536 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 539 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.scopedname_val = new ScopedName(yyvsp[0].id_val, 1);
     ;
     break;}
 case 48:
-#line 539 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 542 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-2].scopedname_val->append(yyvsp[0].id_val);
       yyval.scopedname_val=yyvsp[-2].scopedname_val;
     ;
     break;}
 case 49:
-#line 550 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 553 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.value_base_val = yyvsp[0].value_val; ;
     break;}
 case 50:
-#line 551 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 554 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.value_base_val = yyvsp[0].value_abs_val; ;
     break;}
 case 51:
-#line 552 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 555 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.value_base_val = yyvsp[0].value_box_val; ;
     break;}
 case 52:
-#line 553 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 556 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.value_base_val = yyvsp[0].value_forward_val; ;
     break;}
 case 53:
-#line 557 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 560 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.value_forward_val = new ValueForward(currentFile, yylineno, mainFile, 0, yyvsp[0].id_val);
     ;
     break;}
 case 54:
-#line 560 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 563 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.value_forward_val = new ValueForward(currentFile, yylineno, mainFile, 1, yyvsp[0].id_val);
     ;
     break;}
 case 55:
-#line 566 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 569 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.value_box_val = new ValueBox(currentFile, yylineno, mainFile,
 			yyvsp[-1].id_val, yyvsp[0].type_spec_val->type(), yyvsp[0].type_spec_val->constr());
@@ -1769,13 +1769,13 @@
     ;
     break;}
 case 56:
-#line 574 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 577 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       valueabs_hack = new ValueAbs(currentFile, yylineno, mainFile, yyvsp[0].id_val, 0, 0);
     ;
     break;}
 case 57:
-#line 576 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 579 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       valueabs_hack->finishConstruction(yyvsp[-1].decl_val);
       yyval.value_abs_val = valueabs_hack;
@@ -1783,7 +1783,7 @@
     ;
     break;}
 case 58:
-#line 581 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 584 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       valueabs_hack = new ValueAbs(currentFile, yylineno, mainFile, yyvsp[-1].id_val,
 				   yyvsp[0].valueinheritsupportspec_val->inherits(), yyvsp[0].valueinheritsupportspec_val->supports());
@@ -1791,7 +1791,7 @@
     ;
     break;}
 case 59:
-#line 585 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 588 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       valueabs_hack->finishConstruction(yyvsp[-1].decl_val);
       yyval.value_abs_val = valueabs_hack;
@@ -1799,7 +1799,7 @@
     ;
     break;}
 case 60:
-#line 590 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 593 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in abstract valuetype");
@@ -1812,14 +1812,14 @@
     ;
     break;}
 case 61:
-#line 603 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 606 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-3].value_val->finishConstruction(yyvsp[-1].decl_val);
       yyval.value_val = yyvsp[-3].value_val;
     ;
     break;}
 case 62:
-#line 610 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 613 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.value_val = new Value(currentFile, yylineno, mainFile, 0, yyvsp[-1].id_val,
 		     yyvsp[0].valueinheritsupportspec_val->inherits(), yyvsp[0].valueinheritsupportspec_val->supports());
@@ -1827,7 +1827,7 @@
     ;
     break;}
 case 63:
-#line 615 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 618 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.value_val = new Value(currentFile, yylineno, mainFile, 1, yyvsp[-1].id_val,
 		     yyvsp[0].valueinheritsupportspec_val->inherits(), yyvsp[0].valueinheritsupportspec_val->supports());
@@ -1835,58 +1835,58 @@
     ;
     break;}
 case 64:
-#line 620 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 623 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.value_val = new Value(currentFile, yylineno, mainFile, 0, yyvsp[0].id_val, 0, 0);
     ;
     break;}
 case 65:
-#line 623 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 626 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.value_val = new Value(currentFile, yylineno, mainFile, 1, yyvsp[0].id_val, 0, 0);
     ;
     break;}
 case 66:
-#line 629 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 632 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.valueinheritsupportspec_val = new ValueInheritSupportSpec(yyvsp[-2].valueinheritspec_val, yyvsp[0].inheritspec_val);
     ;
     break;}
 case 67:
-#line 632 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 635 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.valueinheritsupportspec_val = new ValueInheritSupportSpec(yyvsp[0].valueinheritspec_val, 0);
     ;
     break;}
 case 68:
-#line 635 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 638 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.valueinheritsupportspec_val = new ValueInheritSupportSpec(0, yyvsp[0].inheritspec_val);
     ;
     break;}
 case 69:
-#line 641 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 644 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-1].boolean_val) yyvsp[0].valueinheritspec_val->setTruncatable();
       yyval.valueinheritspec_val = yyvsp[0].valueinheritspec_val;
     ;
     break;}
 case 70:
-#line 648 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 651 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 0; ;
     break;}
 case 71:
-#line 649 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 652 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 1; ;
     break;}
 case 72:
-#line 653 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 656 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.valueinheritspec_val = new ValueInheritSpec(yyvsp[0].scopedname_val, currentFile, yylineno);
     ;
     break;}
 case 73:
-#line 656 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 659 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-2].valueinheritspec_val) {
 	yyvsp[-2].valueinheritspec_val->append(new ValueInheritSpec(yyvsp[0].scopedname_val, currentFile, yylineno),
@@ -1897,34 +1897,34 @@
     ;
     break;}
 case 74:
-#line 667 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 670 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.scopedname_val = yyvsp[0].scopedname_val; ;
     break;}
 case 75:
-#line 671 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 674 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = 0; ;
     break;}
 case 76:
-#line 672 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 675 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-1].decl_val) { yyvsp[-1].decl_val->append(yyvsp[0].decl_val); yyval.decl_val = yyvsp[-1].decl_val; }
       else yyval.decl_val = yyvsp[0].decl_val;
     ;
     break;}
 case 77:
-#line 679 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 682 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].decl_val; ;
     break;}
 case 78:
-#line 680 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 683 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].statemember_val; ;
     break;}
 case 79:
-#line 681 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 684 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].factory_val; ;
     break;}
 case 80:
-#line 685 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 688 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.statemember_val = new StateMember(currentFile, yylineno, mainFile,
 			   yyvsp[-3].ulong_val, yyvsp[-2].type_spec_val->type(), yyvsp[-2].type_spec_val->constr(), yyvsp[-1].declarator_val);
@@ -1932,34 +1932,34 @@
     ;
     break;}
 case 81:
-#line 693 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 696 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.ulong_val = 0; ;
     break;}
 case 82:
-#line 694 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 697 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.ulong_val = 1; ;
     break;}
 case 83:
-#line 698 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 701 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-3].factory_val->closeParens();
     ;
     break;}
 case 84:
-#line 700 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 703 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-5].factory_val->finishConstruction(yyvsp[-3].parameter_val);
       yyval.factory_val = yyvsp[-5].factory_val;
     ;
     break;}
 case 85:
-#line 704 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 707 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-3].factory_val->closeParens();
     ;
     break;}
 case 86:
-#line 706 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 709 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in factory parameters");
@@ -1968,166 +1968,166 @@
     ;
     break;}
 case 87:
-#line 715 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 718 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.factory_val = new Factory(currentFile, yylineno, mainFile, yyvsp[0].id_val);
     ;
     break;}
 case 88:
-#line 721 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 724 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.parameter_val = 0; ;
     break;}
 case 89:
-#line 722 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 725 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.parameter_val = yyvsp[0].parameter_val; ;
     break;}
 case 90:
-#line 726 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 729 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.parameter_val = yyvsp[0].parameter_val; ;
     break;}
 case 91:
-#line 727 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 730 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-2].parameter_val) { yyvsp[-2].parameter_val->append(yyvsp[0].parameter_val); yyval.parameter_val = yyvsp[-2].parameter_val; }
       else yyval.parameter_val = yyvsp[0].parameter_val;
     ;
     break;}
 case 92:
-#line 734 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 737 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.parameter_val = new Parameter(currentFile, yylineno, mainFile, 0, yyvsp[-1].type_val, yyvsp[0].id_val);
     ;
     break;}
 case 93:
-#line 742 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 745 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.const_val = new Const(currentFile, yylineno, mainFile, yyvsp[-3].type_val, yyvsp[-2].id_val, yyvsp[0].expr_val);
     ;
     break;}
 case 94:
-#line 748 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 751 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 95:
-#line 749 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 752 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 96:
-#line 750 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 753 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 97:
-#line 751 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 754 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 98:
-#line 752 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 755 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 99:
-#line 753 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 756 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 100:
-#line 754 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 757 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 101:
-#line 755 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 758 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 102:
-#line 756 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 759 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.type_val = IdlType::scopedNameToType(currentFile, yylineno, yyvsp[0].scopedname_val);
     ;
     break;}
 case 103:
-#line 759 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 762 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 104:
-#line 763 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 766 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 105:
-#line 767 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 770 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 106:
-#line 768 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 771 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = new OrExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val); ;
     break;}
 case 107:
-#line 772 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 775 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 108:
-#line 773 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 776 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = new XorExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val); ;
     break;}
 case 109:
-#line 777 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 780 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 110:
-#line 778 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 781 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new AndExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val);
     ;
     break;}
 case 111:
-#line 784 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 787 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 112:
-#line 785 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 788 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
     yyval.expr_val = new RShiftExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val);
   ;
     break;}
 case 113:
-#line 788 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 791 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
     yyval.expr_val = new LShiftExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val);
   ;
     break;}
 case 114:
-#line 794 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 797 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 115:
-#line 795 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 798 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = new AddExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val); ;
     break;}
 case 116:
-#line 796 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 799 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = new SubExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val); ;
     break;}
 case 117:
-#line 800 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 803 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 118:
-#line 801 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 804 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new MultExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val);
     ;
     break;}
 case 119:
-#line 804 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 807 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new DivExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val);
     ;
     break;}
 case 120:
-#line 807 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 810 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new ModExpr(currentFile, yylineno, yyvsp[-2].expr_val, yyvsp[0].expr_val);
     ;
     break;}
 case 121:
-#line 813 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 816 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-1].char_val == '-') yyval.expr_val = new MinusExpr(currentFile, yylineno, yyvsp[0].expr_val);
       if (yyvsp[-1].char_val == '+') yyval.expr_val = new PlusExpr(currentFile, yylineno, yyvsp[0].expr_val);
@@ -2135,89 +2135,89 @@
     ;
     break;}
 case 122:
-#line 818 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 821 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 123:
-#line 822 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 825 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.char_val = '-'; ;
     break;}
 case 124:
-#line 823 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 826 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.char_val = '+'; ;
     break;}
 case 125:
-#line 824 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 827 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.char_val = '~'; ;
     break;}
 case 126:
-#line 828 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 831 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = IdlExpr::scopedNameToExpr(currentFile, yylineno, yyvsp[0].scopedname_val);
     ;
     break;}
 case 127:
-#line 831 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 834 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[0].expr_val; ;
     break;}
 case 128:
-#line 832 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 835 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.expr_val = yyvsp[-1].expr_val; ;
     break;}
 case 129:
-#line 836 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 839 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new IntegerExpr(currentFile, yylineno, yyvsp[0].int_literal_val);
     ;
     break;}
 case 130:
-#line 839 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 842 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new StringExpr(currentFile, yylineno, yyvsp[0].string_val);
     ;
     break;}
 case 131:
-#line 842 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 845 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new WStringExpr(currentFile, yylineno, yyvsp[0].wstring_val);
     ;
     break;}
 case 132:
-#line 845 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 848 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new CharExpr(currentFile, yylineno, yyvsp[0].char_val);
     ;
     break;}
 case 133:
-#line 848 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 851 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new WCharExpr(currentFile, yylineno, yyvsp[0].wchar_val);
     ;
     break;}
 case 134:
-#line 851 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 854 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new FixedExpr(currentFile, yylineno, yyvsp[0].fixed_val);
     ;
     break;}
 case 135:
-#line 854 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 857 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new FloatExpr(currentFile, yylineno, yyvsp[0].float_literal_val);
     ;
     break;}
 case 136:
-#line 857 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 860 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.expr_val = new BooleanExpr(currentFile, yylineno, yyvsp[0].boolean_val);
     ;
     break;}
 case 137:
-#line 863 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 866 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.string_val = yyvsp[0].string_val; ;
     break;}
 case 138:
-#line 864 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 867 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.string_val = new char [strlen(yyvsp[-1].string_val) + strlen(yyvsp[0].string_val) + 1];
       strcpy(yyval.string_val, yyvsp[-1].string_val);
@@ -2227,11 +2227,11 @@
     ;
     break;}
 case 139:
-#line 874 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 877 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.wstring_val = yyvsp[0].wstring_val; ;
     break;}
 case 140:
-#line 875 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 878 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.wstring_val = new _CORBA_WChar [idl_wstrlen(yyvsp[-1].wstring_val) + idl_wstrlen(yyvsp[0].wstring_val) + 1];
       idl_wstrcpy(yyval.wstring_val, yyvsp[-1].wstring_val);
@@ -2241,15 +2241,15 @@
     ;
     break;}
 case 141:
-#line 885 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 888 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 1; ;
     break;}
 case 142:
-#line 886 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 889 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 0; ;
     break;}
 case 143:
-#line 890 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 893 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.ulong_val = yyvsp[0].expr_val->evalAsULong();
       if (yyval.ulong_val < 1)
@@ -2257,29 +2257,29 @@
     ;
     break;}
 case 144:
-#line 898 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 901 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].typedef_val; ;
     break;}
 case 145:
-#line 899 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 902 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].struct_val; ;
     break;}
 case 146:
-#line 900 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 903 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].union_val; ;
     break;}
 case 147:
-#line 901 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 904 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.decl_val = yyvsp[0].enum_val; ;
     break;}
 case 148:
-#line 902 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 905 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.decl_val = new Native(currentFile, yylineno, mainFile, yyvsp[0].id_val);
     ;
     break;}
 case 149:
-#line 908 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 911 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.typedef_val = new Typedef(currentFile, yylineno, mainFile,
 		       yyvsp[-1].type_spec_val->type(), yyvsp[-1].type_spec_val->constr(), yyvsp[0].declarator_val);
@@ -2287,221 +2287,221 @@
     ;
     break;}
 case 150:
-#line 916 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 919 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_spec_val = new TypeSpec(yyvsp[0].type_val, 0); ;
     break;}
 case 151:
-#line 917 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 920 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_spec_val = new TypeSpec(yyvsp[0].type_val, 1); ;
     break;}
 case 152:
-#line 921 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 924 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 153:
-#line 922 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 925 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 154:
-#line 923 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 926 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.type_val = IdlType::scopedNameToType(currentFile, yylineno, yyvsp[0].scopedname_val);
     ;
     break;}
 case 155:
-#line 929 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 932 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 156:
-#line 930 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 933 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 157:
-#line 931 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 934 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 158:
-#line 932 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 935 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 159:
-#line 933 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 936 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 160:
-#line 934 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 937 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 161:
-#line 935 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 938 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 162:
-#line 936 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 939 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 163:
-#line 937 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 940 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 164:
-#line 941 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 944 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 165:
-#line 942 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 945 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 166:
-#line 943 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 946 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 167:
-#line 944 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 947 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 168:
-#line 948 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 951 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].struct_val->thisType(); ;
     break;}
 case 169:
-#line 949 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 952 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].union_val->thisType(); ;
     break;}
 case 170:
-#line 950 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 953 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].enum_val->thisType(); ;
     break;}
 case 171:
-#line 954 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 957 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.declarator_val = yyvsp[-1].declarator_val; ;
     break;}
 case 172:
-#line 955 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 958 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-4].declarator_val) { yyvsp[-4].declarator_val->append(yyvsp[-1].declarator_val); yyval.declarator_val = yyvsp[-4].declarator_val; }
       else yyval.declarator_val = yyvsp[-1].declarator_val;
     ;
     break;}
 case 173:
-#line 962 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 965 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.declarator_val = yyvsp[0].declarator_val; ;
     break;}
 case 174:
-#line 963 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 966 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.declarator_val = yyvsp[0].declarator_val; ;
     break;}
 case 175:
-#line 967 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 970 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.declarator_val = new Declarator(currentFile, yylineno, mainFile, yyvsp[0].id_val, 0);
     ;
     break;}
 case 176:
-#line 973 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 976 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.declarator_val = yyvsp[0].declarator_val; ;
     break;}
 case 177:
-#line 977 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 980 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::floatType; ;
     break;}
 case 178:
-#line 978 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 981 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::doubleType; ;
     break;}
 case 179:
-#line 979 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 982 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::longdoubleType; ;
     break;}
 case 180:
-#line 983 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 986 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 181:
-#line 984 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 987 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 182:
-#line 988 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 991 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 183:
-#line 989 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 992 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 184:
-#line 990 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 993 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 185:
-#line 994 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 997 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::shortType; ;
     break;}
 case 186:
-#line 998 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1001 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::longType; ;
     break;}
 case 187:
-#line 1002 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1005 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::longlongType; ;
     break;}
 case 188:
-#line 1006 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1009 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 189:
-#line 1007 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1010 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 190:
-#line 1008 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1011 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 191:
-#line 1012 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1015 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::ushortType; ;
     break;}
 case 192:
-#line 1016 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1019 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::ulongType; ;
     break;}
 case 193:
-#line 1020 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1023 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::ulonglongType; ;
     break;}
 case 194:
-#line 1024 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1027 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::charType; ;
     break;}
 case 195:
-#line 1028 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1031 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::wcharType; ;
     break;}
 case 196:
-#line 1032 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1035 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::booleanType; ;
     break;}
 case 197:
-#line 1036 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1039 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::octetType; ;
     break;}
 case 198:
-#line 1040 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1043 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::anyType; ;
     break;}
 case 199:
-#line 1044 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1047 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = DeclaredType::corbaObjectType; ;
     break;}
 case 200:
-#line 1048 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1051 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-5].struct_val->finishConstruction(yyvsp[-1].member_val);
       yyval.struct_val = yyvsp[-5].struct_val;
     ;
     break;}
 case 201:
-#line 1052 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1055 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in struct definition");
@@ -2510,24 +2510,24 @@
     ;
     break;}
 case 202:
-#line 1061 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1064 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.struct_val = new Struct(currentFile, yylineno, mainFile, yyvsp[0].id_val);
     ;
     break;}
 case 203:
-#line 1067 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1070 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.member_val = yyvsp[-1].member_val; ;
     break;}
 case 204:
-#line 1068 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1071 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-2].member_val) { yyvsp[-2].member_val->append(yyvsp[-1].member_val); yyval.member_val = yyvsp[-2].member_val; }
       else yyval.member_val = yyvsp[-1].member_val;
     ;
     break;}
 case 205:
-#line 1075 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1078 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.member_val = new Member(currentFile, yylineno, mainFile,
 		      yyvsp[-2].type_spec_val->type(), yyvsp[-2].type_spec_val->constr(), yyvsp[-1].declarator_val);
@@ -2535,7 +2535,7 @@
     ;
     break;}
 case 206:
-#line 1080 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1083 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in member declaration");
@@ -2543,7 +2543,7 @@
     ;
     break;}
 case 207:
-#line 1090 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1093 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
 
       yyvsp[-12].union_val->finishConstruction(yyvsp[-7].type_spec_val->type(), yyvsp[-7].type_spec_val->constr(), yyvsp[-1].union_case_val);
@@ -2552,7 +2552,7 @@
     ;
     break;}
 case 208:
-#line 1096 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1099 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in union declaration");
@@ -2561,95 +2561,95 @@
     ;
     break;}
 case 209:
-#line 1105 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1108 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.union_val = new Union(currentFile, yylineno, mainFile, yyvsp[0].id_val);
     ;
     break;}
 case 210:
-#line 1111 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1114 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_spec_val = new TypeSpec(yyvsp[0].type_val, 0); ;
     break;}
 case 211:
-#line 1112 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1115 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_spec_val = new TypeSpec(yyvsp[0].type_val, 0); ;
     break;}
 case 212:
-#line 1113 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1116 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_spec_val = new TypeSpec(yyvsp[0].type_val, 0); ;
     break;}
 case 213:
-#line 1114 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1117 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_spec_val = new TypeSpec(yyvsp[0].enum_val->thisType(), 1); ;
     break;}
 case 214:
-#line 1115 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1118 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.type_spec_val = new TypeSpec(IdlType::scopedNameToType(currentFile, yylineno, yyvsp[0].scopedname_val),
 			0);
     ;
     break;}
 case 215:
-#line 1122 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1125 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.union_case_val = yyvsp[0].union_case_val; ;
     break;}
 case 216:
-#line 1126 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1129 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.union_case_val = yyvsp[-1].union_case_val; ;
     break;}
 case 217:
-#line 1127 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1130 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-2].union_case_val->append(yyvsp[-1].union_case_val);
       yyval.union_case_val = yyvsp[-2].union_case_val;
     ;
     break;}
 case 218:
-#line 1134 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1137 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-1].union_case_val->finishConstruction(yyvsp[-2].case_label_val);
       yyval.union_case_val = yyvsp[-1].union_case_val;
     ;
     break;}
 case 219:
-#line 1141 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1144 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.case_label_val = yyvsp[0].case_label_val; ;
     break;}
 case 220:
-#line 1142 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1145 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-1].case_label_val->append(yyvsp[0].case_label_val);
       yyval.case_label_val = yyvsp[-1].case_label_val;
     ;
     break;}
 case 221:
-#line 1149 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1152 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.case_label_val = new CaseLabel(currentFile, yylineno, mainFile, yyvsp[-2].expr_val);
     ;
     break;}
 case 222:
-#line 1152 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1155 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.case_label_val = new CaseLabel(currentFile, yylineno, mainFile, 0);
     ;
     break;}
 case 223:
-#line 1158 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1161 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.union_case_val = new UnionCase(currentFile, yylineno, mainFile,
 			 yyvsp[-1].type_spec_val->type(), yyvsp[-1].type_spec_val->constr(), yyvsp[0].declarator_val);
     ;
     break;}
 case 224:
-#line 1165 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1168 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-5].enum_val->finishConstruction(yyvsp[-1].enumerator_val);
       yyval.enum_val = yyvsp[-5].enum_val;
     ;
     break;}
 case 225:
-#line 1169 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1172 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno, "Syntax error in enum definition");
       yyvsp[-1].enum_val->finishConstruction(0);
@@ -2657,115 +2657,115 @@
     ;
     break;}
 case 226:
-#line 1177 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1180 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.enum_val = new Enum(currentFile, yylineno, mainFile, yyvsp[0].id_val);
     ;
     break;}
 case 227:
-#line 1183 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1186 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.enumerator_val = yyvsp[-1].enumerator_val; ;
     break;}
 case 228:
-#line 1184 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1187 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-4].enumerator_val->append(yyvsp[-1].enumerator_val);
       yyval.enumerator_val = yyvsp[-4].enumerator_val;
     ;
     break;}
 case 229:
-#line 1191 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1194 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.enumerator_val = new Enumerator(currentFile, yylineno, mainFile, yyvsp[0].id_val);
     ;
     break;}
 case 230:
-#line 1197 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1200 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.type_val = new SequenceType(yyvsp[-3].type_val, yyvsp[-1].ulong_val);
     ;
     break;}
 case 231:
-#line 1200 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1203 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.type_val = new SequenceType(yyvsp[-1].type_val, 0);
     ;
     break;}
 case 232:
-#line 1206 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1209 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = new StringType(yyvsp[-1].ulong_val); ;
     break;}
 case 233:
-#line 1207 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1210 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.type_val = StringType::unboundedStringType;
     ;
     break;}
 case 234:
-#line 1213 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1216 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = new WStringType(yyvsp[-1].ulong_val); ;
     break;}
 case 235:
-#line 1214 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1217 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.type_val = WStringType::unboundedWStringType;
     ;
     break;}
 case 236:
-#line 1220 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1223 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.declarator_val = new Declarator(currentFile, yylineno, mainFile, yyvsp[-1].id_val, yyvsp[0].array_size_val);
     ;
     break;}
 case 237:
-#line 1226 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1229 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.array_size_val = yyvsp[0].array_size_val; ;
     break;}
 case 238:
-#line 1227 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1230 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-1].array_size_val->append(yyvsp[0].array_size_val);
       yyval.array_size_val = yyvsp[-1].array_size_val;
     ;
     break;}
 case 239:
-#line 1234 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1237 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.array_size_val = new ArraySize(yyvsp[-1].ulong_val); ;
     break;}
 case 240:
-#line 1238 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1241 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.attribute_val = new Attribute(currentFile, yylineno, mainFile, yyvsp[-3].boolean_val, yyvsp[-1].type_val, yyvsp[0].declarator_val);
     ;
     break;}
 case 241:
-#line 1244 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1247 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 0; ;
     break;}
 case 242:
-#line 1245 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1248 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 1; ;
     break;}
 case 243:
-#line 1249 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1252 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.declarator_val = yyvsp[-1].declarator_val; ;
     break;}
 case 244:
-#line 1250 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1253 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-4].declarator_val) { yyvsp[-4].declarator_val->append(yyvsp[-1].declarator_val); yyval.declarator_val = yyvsp[-4].declarator_val; }
       else yyval.declarator_val = yyvsp[-1].declarator_val;
     ;
     break;}
 case 245:
-#line 1257 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1260 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-5].exception_val->finishConstruction(yyvsp[-1].member_val);
       yyval.exception_val = yyvsp[-5].exception_val;
     ;
     break;}
 case 246:
-#line 1261 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1264 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in exception definition");
@@ -2774,37 +2774,37 @@
     ;
     break;}
 case 247:
-#line 1270 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1273 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.exception_val = new Exception(currentFile, yylineno, mainFile, yyvsp[0].id_val);
     ;
     break;}
 case 248:
-#line 1276 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1279 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.member_val = 0; ;
     break;}
 case 249:
-#line 1277 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1280 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-1].member_val) { yyvsp[-1].member_val->append(yyvsp[0].member_val);	yyval.member_val = yyvsp[-1].member_val; }
       else yyval.member_val = yyvsp[0].member_val;
     ;
     break;}
 case 250:
-#line 1284 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1287 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-2].operation_val->closeParens();
     ;
     break;}
 case 251:
-#line 1286 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1289 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-6].operation_val->finishConstruction(yyvsp[-4].parameter_val, yyvsp[-1].raisesspec_val, yyvsp[0].contextspec_val);
       yyval.operation_val = yyvsp[-6].operation_val;
     ;
     break;}
 case 252:
-#line 1290 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1293 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in operation declaration");
@@ -2814,41 +2814,41 @@
     ;
     break;}
 case 253:
-#line 1300 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1303 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.operation_val = new Operation(currentFile, yylineno, mainFile, yyvsp[-2].boolean_val, yyvsp[-1].type_val, yyvsp[0].id_val);
     ;
     break;}
 case 254:
-#line 1306 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1309 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 0; ;
     break;}
 case 255:
-#line 1307 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1310 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = yyvsp[0].boolean_val; ;
     break;}
 case 256:
-#line 1311 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1314 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.boolean_val = 1; ;
     break;}
 case 257:
-#line 1315 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1318 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 258:
-#line 1316 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1319 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = BaseType::voidType; ;
     break;}
 case 259:
-#line 1320 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1323 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.parameter_val = yyvsp[-1].parameter_val; ;
     break;}
 case 260:
-#line 1321 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1324 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.parameter_val = 0; ;
     break;}
 case 261:
-#line 1322 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1325 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno,
 		     "Syntax error in operation parameters");
@@ -2856,176 +2856,176 @@
     ;
     break;}
 case 262:
-#line 1330 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1333 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.parameter_val = yyvsp[-1].parameter_val; ;
     break;}
 case 263:
-#line 1331 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1334 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       if (yyvsp[-4].parameter_val) { yyvsp[-4].parameter_val->append(yyvsp[-1].parameter_val); yyval.parameter_val = yyvsp[-4].parameter_val; }
       else yyval.parameter_val = yyvsp[-1].parameter_val;
     ;
     break;}
 case 264:
-#line 1338 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1341 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.parameter_val = new Parameter(currentFile, yylineno, mainFile, yyvsp[-2].int_val, yyvsp[-1].type_val, yyvsp[0].id_val);
     ;
     break;}
 case 265:
-#line 1344 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1347 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.int_val = 0; ;
     break;}
 case 266:
-#line 1345 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1348 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.int_val = 1; ;
     break;}
 case 267:
-#line 1346 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1349 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.int_val = 2; ;
     break;}
 case 268:
-#line 1350 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1353 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.raisesspec_val = 0; ;
     break;}
 case 269:
-#line 1351 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1354 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.raisesspec_val = yyvsp[-1].raisesspec_val; ;
     break;}
 case 270:
-#line 1355 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1358 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.raisesspec_val = yyvsp[-1].raisesspec_val; ;
     break;}
 case 271:
-#line 1359 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1362 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.raisesspec_val = new RaisesSpec(yyvsp[-1].scopedname_val, currentFile, yylineno);
     ;
     break;}
 case 272:
-#line 1362 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1365 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-4].raisesspec_val->append(new RaisesSpec(yyvsp[-1].scopedname_val, currentFile, yylineno));
       yyval.raisesspec_val = yyvsp[-4].raisesspec_val;
     ;
     break;}
 case 273:
-#line 1369 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1372 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.contextspec_val = 0; ;
     break;}
 case 274:
-#line 1370 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1373 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.contextspec_val = yyvsp[-1].contextspec_val; ;
     break;}
 case 275:
-#line 1374 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1377 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.contextspec_val = yyvsp[-1].contextspec_val; ;
     break;}
 case 276:
-#line 1378 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1381 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.contextspec_val = new ContextSpec(yyvsp[-1].string_val, currentFile, yylineno);
     ;
     break;}
 case 277:
-#line 1381 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1384 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyvsp[-4].contextspec_val->append(new ContextSpec(yyvsp[-1].string_val, currentFile, yylineno));
       yyval.contextspec_val = yyvsp[-4].contextspec_val;
     ;
     break;}
 case 278:
-#line 1388 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1391 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 279:
-#line 1389 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1392 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 280:
-#line 1390 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1393 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = yyvsp[0].type_val; ;
     break;}
 case 281:
-#line 1391 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1394 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.type_val = IdlType::scopedNameToType(currentFile, yylineno, yyvsp[0].scopedname_val);
     ;
     break;}
 case 282:
-#line 1397 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1400 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlError(currentFile, yylineno, "Fixed is not supported yet");
       yyval.type_val = 0;
     ;
     break;}
 case 283:
-#line 1404 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1407 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlError(currentFile, yylineno, "Fixed is not supported yet");
       yyval.type_val = 0;
     ;
     break;}
 case 284:
-#line 1411 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1414 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.type_val = new DeclaredType(IdlType::tk_value, 0, 0); ;
     break;}
 case 293:
-#line 1432 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1435 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       Prefix::setPrefix(idl_strdup(yyvsp[-1].string_val));
     ;
     break;}
 case 294:
-#line 1435 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1438 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno, "Malformed #pragma prefix");
     ;
     break;}
 case 295:
-#line 1441 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1444 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       Decl* d = Decl::scopedNameToDecl(currentFile, yylineno, yyvsp[-2].scopedname_val);
       if (d) DeclRepoId::setRepoId(d, yyvsp[-1].string_val, currentFile, yylineno);
     ;
     break;}
 case 296:
-#line 1445 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1448 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno, "Malformed #pragma id");
     ;
     break;}
 case 297:
-#line 1451 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1454 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       Decl* d = Decl::scopedNameToDecl(currentFile, yylineno, yyvsp[-4].scopedname_val);
       if (d) DeclRepoId::setVersion(d, yyvsp[-3].int_literal_val, yyvsp[-1].int_literal_val, currentFile, yylineno);
     ;
     break;}
 case 298:
-#line 1455 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1458 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       IdlSyntaxError(currentFile, yylineno, "Malformed #pragma version");
     ;
     break;}
 case 299:
-#line 1461 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1464 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       Pragma::add(yyvsp[-1].string_val, currentFile, yylineno-1);
     ;
     break;}
 case 300:
-#line 1467 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1470 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       Pragma::add(yyvsp[-1].string_val, currentFile, yylineno);
     ;
     break;}
 case 301:
-#line 1473 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1476 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 { yyval.string_val = yyvsp[0].string_val; ;
     break;}
 case 302:
-#line 1474 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1477 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 {
       yyval.string_val = new char [strlen(yyvsp[-1].string_val) + strlen(yyvsp[0].string_val) + 1];
       strcpy(yyval.string_val, yyvsp[-1].string_val);
@@ -3256,5 +3256,5 @@
     }
   return 1;
 }
-#line 1483 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
+#line 1486 "/local/dpg1/omni/30/src/tool/omniidl/cxx/idl.yy"
 
Index: omniidl/cxx/cccp/config-freebsd.h
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/cccp/config-freebsd.h,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- omniidl/cxx/cccp/config-freebsd.h	2000/03/03 17:41:33	1.3
+++ omniidl/cxx/cccp/config-freebsd.h	2000/08/29 09:57:01	1.3.2.1
@@ -5,4 +5,7 @@
 #define HAVE_STDLIB_H 1
 #define HAVE_STRERROR 1
 
+#else
+#error "You must set definitions for your architecture in config-freebsd.h"
+
 #endif
Index: omniidl/cxx/cccp/config-linux.h
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/cccp/config-linux.h,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- omniidl/cxx/cccp/config-linux.h	2000/03/03 17:41:32	1.4
+++ omniidl/cxx/cccp/config-linux.h	2000/08/29 09:57:01	1.4.2.1
@@ -1,8 +1,11 @@
-#ifdef __x86__
+#if defined(__x86__)
 
 #define SIZEOF_UNSIGNED_CHAR 1
 #define SIZEOF_INT 4
 #define HAVE_STDLIB_H 1
 #define HAVE_STRERROR 1
+
+#else
+#error "You must set definitions for your architecture in config-linux.h"
 
 #endif
Index: omniidl/cxx/cccp/config-solaris.h
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/cccp/config-solaris.h,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- omniidl/cxx/cccp/config-solaris.h	2000/03/03 17:41:32	1.4
+++ omniidl/cxx/cccp/config-solaris.h	2000/08/29 09:57:01	1.4.2.1
@@ -1,8 +1,18 @@
-#ifdef __sparc__
+#if defined(__sparc__)
 
 #define SIZEOF_UNSIGNED_CHAR 1
 #define SIZEOF_INT 4
 #define HAVE_STDLIB_H 1
 #define HAVE_STRERROR 1
+
+#elif defined(__x86__)
+
+#define SIZEOF_UNSIGNED_CHAR 1
+#define SIZEOF_INT 4
+#define HAVE_STDLIB_H 1
+#define HAVE_STRERROR 1
+
+#else
+#error "You must set definitions for your architecture in config-solaris.h"
 
 #endif
Index: omniidl/cxx/cccp/config.h
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/cccp/config.h,v
retrieving revision 1.6
retrieving revision 1.6.2.1
diff -u -r1.6 -r1.6.2.1
--- omniidl/cxx/cccp/config.h	2000/03/03 17:41:31	1.6
+++ omniidl/cxx/cccp/config.h	2000/08/29 09:57:02	1.6.2.1
@@ -31,6 +31,9 @@
 #elif defined(__nextstep__)
 #include "config-nextstep.h"
 
+#else
+#error "You must create a cccp config file for your platform"
+
 #endif
 
 #define BITS_PER_UNIT SIZEOF_UNSIGNED_CHAR
Index: omniidl/cxx/cccp/dir.mk
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/cxx/cccp/dir.mk,v
retrieving revision 1.7
retrieving revision 1.7.2.1
diff -u -r1.7 -r1.7.2.1
--- omniidl/cxx/cccp/dir.mk	2000/03/03 17:41:31	1.7
+++ omniidl/cxx/cccp/dir.mk	2000/08/29 09:57:02	1.7.2.1
@@ -38,3 +38,7 @@
 
 $(omnicpp): $(OBJS)
 	@(libs=""; $(CExecutable))
+
+
+veryclean::
+	$(RM) $(omnicpp)
Index: omniidl/python/omniidl/idlast.py
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/python/omniidl/idlast.py,v
retrieving revision 1.18
retrieving revision 1.18.2.1
diff -u -r1.18 -r1.18.2.1
--- omniidl/python/omniidl/idlast.py	2000/06/29 14:08:11	1.18
+++ omniidl/python/omniidl/idlast.py	2000/08/29 10:20:26	1.18.2.1
@@ -26,12 +26,15 @@
 #   
 #   Python definitions for abstract syntax tree classes
 
-# $Id: idlast.py,v 1.18 2000/06/29 14:08:11 dpg1 Exp $
+# $Id: idlast.py,v 1.18.2.1 2000/08/29 10:20:26 dpg1 Exp $
 # $Log: idlast.py,v $
-# Revision 1.18  2000/06/29 14:08:11  dpg1
+# Revision 1.18.2.1  2000/08/29 10:20:26  dpg1
+# Operations and attributes now have repository ids.
+#
+# Revision 1.13.2.3  2000/06/29 14:08:11  dpg1
 # Incorrect visitor method called for Value nodes.
 #
-# Revision 1.17  2000/06/08 14:36:18  dpg1
+# Revision 1.13.2.2  2000/06/08 14:36:21  dpg1
 # Comments and pragmas are now objects rather than plain strings, so
 # they can have file,line associated with them.
 #
@@ -642,22 +645,26 @@
 
   readonly()    -- boolean: true if the attribute is read only.
   attrType()    -- IdlType.Type object for the attribute's type.
-  identifiers() -- list of strings containing the attribute identifiers."""
+  declarators() -- list of the attribute's declarators.
+  identifiers() -- list of strings containing the attribute identifiers
+                     (equivalent to the identifiers inside the declarators)."""
 
     def __init__(self, file, line, mainFile, pragmas, comments,
-                 readonly, attrType, identifiers):
+                 readonly, attrType, declarators):
 
         Decl.__init__(self, file, line, mainFile, pragmas, comments)
 
-        self.__readonly = readonly
-        self.__attrType = attrType
-        self.__identifiers = identifiers
+        self.__readonly    = readonly
+        self.__attrType    = attrType
+        self.__declarators = declarators
+        self.__identifiers = map(lambda d: d.identifier(), declarators)
         #print line, "Attribute init:", readonly, identifiers
 
     def accept(self, visitor): visitor.visitAttribute(self)
 
     def readonly(self):    return self.__readonly
     def attrType(self):    return self.__attrType
+    def declarators(self): return self.__declarators
     def identifiers(self): return self.__identifiers
 
 
@@ -693,27 +700,26 @@
     def identifier(self): return self.__identifier
 
 
-class Operation (Decl):
-    """Operation declaration (Decl)
+class Operation (Decl, DeclRepoId):
+    """Operation declaration (Decl, DeclRepoId)
 
 Functions:
 
   oneway()     -- boolean: true if operation is one way.
   returnType() -- IdlType.Type object for return type.
-  identifier() -- string of operation identifier.
   parameters() -- list of Parameter objects.
   raises()     -- list of Exception objects.
   contexts()   -- list of strings for context expressions."""
 
     def __init__(self, file, line, mainFile, pragmas, comments,
-                 oneway, returnType, identifier,
+                 oneway, returnType, identifier, scopedName, repoId,
                  parameters, raises, contexts):
 
         Decl.__init__(self, file, line, mainFile, pragmas, comments)
+        DeclRepoId.__init__(self, identifier, scopedName, repoId)
 
         self.__oneway     = oneway
         self.__returnType = returnType
-        self.__identifier = identifier
         self.__parameters = parameters
         self.__raises     = raises
         self.__contexts   = contexts
@@ -723,7 +729,6 @@
 
     def oneway(self):     return self.__oneway
     def returnType(self): return self.__returnType
-    def identifier(self): return self.__identifier
     def parameters(self): return self.__parameters
     def raises(self):     return self.__raises
     def contexts(self):   return self.__contexts
Index: omniidl/python/omniidl/idlutil.py
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/python/omniidl/idlutil.py,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- omniidl/python/omniidl/idlutil.py	2000/03/03 17:41:30	1.5
+++ omniidl/python/omniidl/idlutil.py	2000/08/29 15:20:28	1.5.2.1
@@ -26,8 +26,12 @@
 #   
 #   Utility functions
 
-# $Id: idlutil.py,v 1.5 2000/03/03 17:41:30 dpg1 Exp $
+# $Id: idlutil.py,v 1.5.2.1 2000/08/29 15:20:28 dpg1 Exp $
 # $Log: idlutil.py,v $
+# Revision 1.5.2.1  2000/08/29 15:20:28  dpg1
+# New relativeScope() function. New -i flag to enter interactive loop
+# after parsing
+#
 # Revision 1.5  2000/03/03 17:41:30  dpg1
 # Major reorganisation to support omniORB 3.0 as well as 2.8.
 #
@@ -47,9 +51,11 @@
 slashName()      -- format a scoped name with '/' separating components.
 dotName()        -- format a scoped name with '.' separating components.
 ccolonName()     -- format a scoped name with '::' separating components.
-pruneScope()     -- remove common prefix from a scoped name."""
+pruneScope()     -- remove common prefix from a scoped name.
+relativeScope()  -- give a minimal name for one scope relative to another."""
 
 import string
+import _omniidl
 
 def slashName(scopedName, our_scope=[]):
     """slashName(list, [list]) -> string
@@ -109,3 +115,46 @@
         if l[i] not in vis:
             l[i] = "\\%03o" % ord(l[i])
     return string.join(l, "")
+
+
+def relativeScope(fromScope, destScope):
+    """relativeScope(fromScope, destScope) -> list
+
+Given two globally-scoped names, return a minimal scoped name list
+which identifies the destination scope, without clashing with another
+identifier. For example, given IDL:
+
+  module M {
+    typedef short A;
+    typedef long  B;
+
+    module N {
+      typedef string B;
+      interface I {
+        void op(in ::M::A x, in ::M::B y);
+      };
+    };
+  };
+
+relativeScope(["M", "N", "I"], ["M", "A"]) -> ["A"]
+relativeScope(["M", "N", "I"], ["M", "B"]) -> ["M", "B"]
+
+If the only valid result is a globally-scoped name, the result list is
+prefixed with None:
+
+  module O {
+    typedef short C;
+  };
+  module P {
+    module O {
+      interface J {
+        void op(in ::O::C z);
+      };
+    };
+  };
+
+relativeScope(["P", "O", "J"], ["O", "C"]) -> [None, "O", "C"]
+
+If either scoped name does not exist, returns None."""
+
+    return _omniidl.relativeScopedName(fromScope, destScope)
Index: omniidl/python/omniidl/main.py
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/python/omniidl/main.py,v
retrieving revision 1.25
retrieving revision 1.25.2.3
diff -u -r1.25 -r1.25.2.3
--- omniidl/python/omniidl/main.py	2000/07/06 09:40:44	1.25
+++ omniidl/python/omniidl/main.py	2000/09/11 14:36:50	1.25.2.3
@@ -27,108 +27,29 @@
 #   
 #   IDL compiler main function
 
-# $Id: main.py,v 1.25 2000/07/06 09:40:44 dpg1 Exp $
+# $Id: main.py,v 1.25.2.3 2000/09/11 14:36:50 dpg1 Exp $
 # $Log: main.py,v $
-# Revision 1.25  2000/07/06 09:40:44  dpg1
-# Spelling mistake :-(
+# Revision 1.25.2.3  2000/09/11 14:36:50  dpg1
+# New -T option to work around Win98 pipe problems.
 #
-# Revision 1.15.2.13  2000/07/06 09:30:20  dpg1
-# Clarify omniidl usage in documentation and omniidl -u
+# Revision 1.25.2.2  2000/09/06 11:40:24  dpg1
+# Support for Python 1.6 and 2.0b1.
 #
-# Revision 1.15.2.12  2000/06/27 16:23:26  sll
-# Merged OpenVMS port.
+# Revision 1.25.2.1  2000/08/29 15:20:28  dpg1
+# New relativeScope() function. New -i flag to enter interactive loop
+# after parsing
 #
-# Revision 1.15.2.11  2000/06/20 13:55:58  dpg1
-# omniidl now keeps the C++ tree until after the back-ends have run.
-# This means that back-ends can be C++ extension modules.
+# [...truncated...]
 #
-# Revision 1.15.2.10  2000/06/05 18:13:28  dpg1
-# Comments can be attached to subsequent declarations (with -K). Better
-# idea of most recent decl in operation declarations
-#
-# Revision 1.15.2.9  2000/03/17 16:28:46  dpg1
-# Small improvement to error reporting.
-#
-# Revision 1.15.2.8  2000/03/16 11:09:30  dpg1
-# Better error reporting if import fails.
-#
-# Revision 1.15.2.7  2000/03/14 14:54:17  dpg1
-# Incorrect message with omniidl -E.
-#
-# Revision 1.15.2.6  2000/03/06 15:03:45  dpg1
-# Minor bug fixes to omniidl. New -nf and -k flags.
-#
-# Revision 1.15.2.5  2000/03/02 11:22:46  dpg1
-# omniidl.py renamed omniidlrun.py to avoid problems with import
-# omniidl.main.
-#
-# Revision 1.15.2.4  2000/02/22 16:44:50  dpg1
-# Cosmetic change.
-#
-# Revision 1.15.2.3  2000/02/17 11:18:05  dpg1
-# Multiple -p flags now preserve the order, rather than reversing it.
-#
-# Revision 1.15.2.2  2000/02/16 16:23:52  dpg1
-# Support things for Python neophytes.
-#
-# Revision 1.15.2.1  2000/02/14 18:34:52  dpg1
-# New omniidl merged in.
-#
-# Revision 1.15  2000/02/14 12:49:57  dpg1
-# Python version check. New -p option.
-#
-# Revision 1.14  2000/02/04 12:17:05  dpg1
-# Support for VMS.
-#
-# Revision 1.13  2000/01/18 17:15:05  dpg1
-# Changes for "small" distribution.
-#
-# Revision 1.12  1999/12/21 16:03:57  dpg1
-# Warning if no back-ends are selected.
-#
-# Revision 1.11  1999/12/17 11:39:23  dpg1
-# Cosmetic change
-#
-# Revision 1.10  1999/11/30 10:41:20  dpg1
-# Back-ends can now have their own usage string.
-#
-# Revision 1.9  1999/11/23 16:59:22  dpg1
-# New command line option -C to send output to a different directory.
-#
-# Revision 1.8  1999/11/23 09:52:11  dpg1
-# Dumb bug where maps weren't cleared between runs.
-#
-# Revision 1.7  1999/11/17 15:01:20  dpg1
-# -Wb and -Wp now support multiple arguments separated by commas.
-#
-# Revision 1.6  1999/11/17 14:33:55  dpg1
-# Clean up of usage info.
-#
-# Revision 1.5  1999/11/15 15:49:22  dpg1
-# Documentation strings.
-#
-# Revision 1.4  1999/11/12 17:15:35  dpg1
-# Verbose messages now written to stderr.
-#
-# Revision 1.3  1999/11/12 15:53:48  dpg1
-# New functions omniORB.importIDL() and omniORB.importIDLString().
-#
-# Revision 1.2  1999/11/12 14:07:18  dpg1
-# If back-end foo is not found in omniidl.be.foo, now tries to import
-# foo.
-#
-# Revision 1.1  1999/11/08 11:43:34  dpg1
-# Changes for NT support.
-#
 
 """IDL Compiler front-end main function"""
 
 import sys
 
-if sys.version[:6] != "1.5.2 ":
+if sys.hexversion < 0x10502f0:
     sys.stderr.write("\n\n")
     sys.stderr.write("omniidl: WARNING!!\n\n")
-    sys.stderr.write("omniidl: Python version 1.5.2 is required.\n")
+    sys.stderr.write("omniidl: Python version 1.5.2 or later is required.\n")
     sys.stderr.write("omniidl: " + sys.executable + " is version " + \
                      sys.version + "\n")
     sys.stderr.write("omniidl: Execution is likely to fail.\n")
@@ -157,6 +78,7 @@
   -E              Run preprocessor only, print on stdout
   -Ycmd           Set command for the preprocessor
   -N              Do not run preprocessor
+  -T              Use a temporary file, not a pipe, for preprocessor output
   -Wparg[,arg...] Send args to the preprocessor
   -bback_end      Select a back-end to be used. More than one permitted
   -Wbarg[,arg...] Send args to the back-end
@@ -165,6 +87,7 @@
   -K              Comments before declarations are kept for the back-ends
   -Cdir           Change directory to dir before writing output
   -d              Dump the parsed IDL then exit
+  -i              Enter interactive mode after parsing the IDL
   -pdir           Path to omniidl back-ends ($TOP/lib/python)
   -V              Print version info then exit
   -u              Print this usage message and exit
@@ -207,16 +130,18 @@
 verbose           = 0
 quiet             = 0
 print_usage       = 0
+interactive       = 0
+temp_file         = None
 
 def parseArgs(args):
     global preprocessor_args, preprocessor_only, preprocessor_cmd
     global no_preprocessor, backend, backend_args, dump_only, cd_to
-    global verbose, quiet, print_usage
+    global verbose, quiet, print_usage, interactive, temp_file
 
     paths = []
 
     try:
-        opts,files = getopt.getopt(args, "D:I:U:EY:NW:b:n:kKC:dVuhvqp:")
+        opts,files = getopt.getopt(args, "D:I:U:EY:NW:b:n:kKC:dVuhvqp:iT")
     except getopt.error, e:
         sys.stderr.write("Error in arguments: " + e + "\n")
         sys.stderr.write("Use `" + cmdname + " -u' for usage\n")
@@ -310,6 +235,17 @@
         elif o == "-p":
             paths.append(a)
 
+        elif o == "-i":
+            interactive = 1
+
+        elif o == "-T":
+            try:
+                import tempfile
+                temp_file = tempfile.mktemp(".idl")
+            except ImportError:
+                # No tempfile module. Just use current directory and hope...
+                temp_file = "omniidl-tmp" + `os.getpid()` + ".idl"
+
     sys.path = paths + sys.path
 
     return files
@@ -336,7 +272,7 @@
 def main(argv=None):
     global preprocessor_args, preprocessor_only, preprocessor_cmd
     global no_preprocessor, backend, backend_args, dump_only, cd_to
-    global verbose, quiet, print_usage
+    global verbose, quiet, print_usage, interactive
 
     if argv is None: argv = sys.argv
 
@@ -389,7 +325,8 @@
     if print_usage:
         sys.exit(0)
 
-    if len(backends) == 0 and not (quiet or dump_only or preprocessor_only):
+    if len(backends) == 0 and \
+       not (quiet or dump_only or preprocessor_only or interactive):
         sys.stderr.write(cmdname + ": Warning: No back-ends specified; " \
                          "checking IDL for validity\n")
 
@@ -420,8 +357,27 @@
                     sys.exit(1)
                 sys.exit(0)
 
-            file = os.popen(preproc_cmd, "r")
-        else:
+            if temp_file:
+                if verbose:
+                    sys.stderr.write(cmdname + \
+                                     ": cpp output to temporary file `" + \
+                                     temp_file + "'\n")
+                err = os.system(preproc_cmd + " >" + temp_file)
+                if err:
+                    if not quiet:
+                        sys.stderr.write(cmdname + \
+                                         ": Error running preprocessor\n")
+                    try:
+                        os.remove(temp_file)
+                    except:
+                        pass
+                    sys.exit(1)
+                file = open(temp_file, "r")
+
+            else:
+                file = os.popen(preproc_cmd, "r")
+
+        else: # No preprocessor
             file = open(file, "r")
 
         if verbose: sys.stderr.write(cmdname + ": Running front end\n")
@@ -430,6 +386,8 @@
             if verbose:
                 sys.stderr.write(cmdname + ": Dumping\n")
             _omniidl.dump(file)
+            file.close()
+            if temp_file: os.remove(temp_file)
         else:
             tree = _omniidl.compile(file)
 
@@ -455,8 +413,19 @@
                 bemodules[i].run(tree, backends_args[i])
                 i = i + 1
 
+            if interactive:
+                if verbose:
+                    sys.stderr.write(cmdname + ": Entering interactive loop\n")
+
+                idlast.tree = tree
+                _omniidl.runInteractiveLoop()
+                del idlast.tree
+
             if cd_to is not None:
                 os.chdir(old_wd)
+
+            if temp_file:
+                os.remove(temp_file)
 
             idlast.clear()
             idltype.clear()
Index: omniidl/python/scripts/omniidlrun.py
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl/python/scripts/omniidlrun.py,v
retrieving revision 1.3.2.2
retrieving revision 1.3.2.3
diff -u -r1.3.2.2 -r1.3.2.3
--- omniidl/python/scripts/omniidlrun.py	2000/08/14 16:09:17	1.3.2.2
+++ omniidl/python/scripts/omniidlrun.py	2000/09/06 11:40:24	1.3.2.3
@@ -29,10 +29,10 @@
 
 import sys
 
-if sys.version[:6] != "1.5.2 ":
+if sys.hexversion < 0x10502f0:
     sys.stderr.write("\n\n")
     sys.stderr.write("omniidl: WARNING!!\n\n")
-    sys.stderr.write("omniidl: Python version 1.5.2 is required.\n")
+    sys.stderr.write("omniidl: Python version 1.5.2 or later is required.\n")
     sys.stderr.write("omniidl: " + sys.executable + " is version " + \
                      sys.version + "\n")
     sys.stderr.write("omniidl: Execution is likely to fail.\n")
Index: omniidl_be/python.py
===================================================================
RCS file: /cvsroot/omniORBpy/omniidl_be/python.py,v
retrieving revision 1.27.2.2
retrieving revision 1.27.2.3
diff -u -r1.27.2.2 -r1.27.2.3
--- omniidl_be/python.py	2000/08/07 09:19:24	1.27.2.2
+++ omniidl_be/python.py	2000/08/22 11:52:28	1.27.2.3
@@ -26,8 +26,11 @@
 #   
 #   Back-end for Python
 
-# $Id: python.py,v 1.27.2.2 2000/08/07 09:19:24 dpg1 Exp $
+# $Id: python.py,v 1.27.2.3 2000/08/22 11:52:28 dpg1 Exp $
 # $Log: python.py,v $
+# Revision 1.27.2.3  2000/08/22 11:52:28  dpg1
+# Generate inherited classes for typedef to struct/union.
+#
 # Revision 1.27.2.2  2000/08/07 09:19:24  dpg1
 # Long long support
 #
@@ -301,13 +304,22 @@
 constant = """\
 @cname@ = @value@"""
 
-typedef_at_module_scope = """\
+typedef_header = """\
 
 # typedef ... @tdname@
 class @tdname@:
     _NP_RepositoryId = "@repoId@"
     def __init__(self):
-        raise RuntimeError("Cannot construct objects of this type.")
+        raise RuntimeError("Cannot construct objects of this type.")"""
+
+typedef_struct_union_header = """\
+
+# typedef ... @tdname@
+class @tdname@ (@parent@):
+    _NP_RepositoryId = "@repoId@"
+"""
+
+typedef_at_module_scope = """\
 _0_@modname@.@tdname@ = @tdname@
 _0_@modname@._d_@tdname@  = @desc@
 _0_@modname@._ad_@tdname@ = (omniORB.tcInternal.tv_alias, @tdname@._NP_RepositoryId, "@tdname@", @tddesc@)
@@ -316,12 +328,6 @@
 del @tdname@"""
 
 typedef = """\
-
-# typedef ... @tdname@
-class @tdname@:
-    _NP_RepositoryId = "@repoId@"
-    def __init__(self):
-        raise RuntimeError("Cannot construct objects of this type.")
 _d_@tdname@  = @desc@
 _ad_@tdname@ = (omniORB.tcInternal.tv_alias, @tdname@._NP_RepositoryId, "@tdname@", @tddesc@)
 _tc_@tdname@ = omniORB.tcInternal.createTypeCode(_ad_@tdname@)
@@ -943,11 +949,29 @@
                                                        decl, [])
                 tddesc = typeAndDeclaratorToDescriptor(node.aliasType(),
                                                        decl, [], 1)
+
+                unaliased_type = node.aliasType().unalias()
+
+                if len(decl.sizes()) == 0 and \
+                   unaliased_type.kind() in [idltype.tk_struct,
+                                             idltype.tk_union]:
+
+                    parent = dotName(fixupScopedName(unaliased_type.decl().\
+                                                     scopedName()))
+
+                    self.st.out(typedef_struct_union_header,
+                                tdname = tdname,
+                                repoId = decl.repoId(),
+                                parent = parent)
+                else:
+                    self.st.out(typedef_header,
+                                tdname  = tdname,
+                                repoId  = decl.repoId())
+
                 self.st.out(typedef_at_module_scope,
                             tdname  = tdname,
                             desc    = desc,
                             tddesc  = tddesc,
-                            repoId  = decl.repoId(),
                             modname = self.modname)
             else:
                 desc   = typeAndDeclaratorToDescriptor(node.aliasType(),
@@ -956,11 +980,29 @@
                 tddesc = typeAndDeclaratorToDescriptor(node.aliasType(),
                                                        decl,
                                                        self.currentScope, 1)
+
+                unaliased_type = node.aliasType().unalias()
+
+                if len(decl.sizes()) == 0 and \
+                   unaliased_type.kind() in [idltype.tk_struct,
+                                             idltype.tk_union]:
+
+                    parent = dotName(fixupScopedName(unaliased_type.decl().\
+                                                     scopedName()))
+
+                    self.st.out(typedef_struct_union_header,
+                                tdname = tdname,
+                                repoId = decl.repoId(),
+                                parent = parent)
+                else:
+                    self.st.out(typedef_header,
+                                tdname  = tdname,
+                                repoId  = decl.repoId())
+
                 self.st.out(typedef,
                             tdname  = tdname,
                             desc    = desc,
-                            tddesc  = tddesc,
-                            repoId  = decl.repoId())
+                            tddesc  = tddesc)
     #
     # Struct
     #
@@ -1520,8 +1562,11 @@
     else:
         return str(val)
 
+__translate_table = string.maketrans(" -.,", "____")
+
 def outputFileName(idlname):
-    return string.replace(os.path.basename(idlname), ".", "_")
+    global __translate_table
+    return string.translate(os.path.basename(idlname), __translate_table)
 
 def checkStubPackage(package):
     """Check the given package name for use as a stub directory
Index: python/omniORB/__init__.py
===================================================================
RCS file: /cvsroot/omniORBpy/python/omniORB/__init__.py,v
retrieving revision 1.24.2.1
retrieving revision 1.24.2.2
diff -u -r1.24.2.1 -r1.24.2.2
--- python/omniORB/__init__.py	2000/08/17 08:46:06	1.24.2.1
+++ python/omniORB/__init__.py	2000/08/23 09:22:07	1.24.2.2
@@ -28,9 +28,12 @@
 #    omniORB module -- omniORB specific things
 
 
-# $Id: __init__.py,v 1.24.2.1 2000/08/17 08:46:06 dpg1 Exp $
+# $Id: __init__.py,v 1.24.2.2 2000/08/23 09:22:07 dpg1 Exp $
 
 # $Log: __init__.py,v $
+# Revision 1.24.2.2  2000/08/23 09:22:07  dpg1
+# Fix loading of IfR stubs with "import CORBA"
+#
 # Revision 1.24.2.1  2000/08/17 08:46:06  dpg1
 # Support for omniORB.LOCATION_FORWARD exception
 #
@@ -333,7 +336,9 @@
 
 # Function to return a Python module for the required IDL module name
 def openModule(mname, fname=None):
-    if sys.modules.has_key(mname):
+    if mname == "CORBA":
+        mod = sys.modules["omniORB.CORBA"]
+    elif sys.modules.has_key(mname):
         mod = sys.modules[mname]
     else:
         mod = newModule(mname)
@@ -353,11 +358,6 @@
     mlist   = string.split(mname, ".")
     current = ""
     mod     = None
-
-    # If we're trying to re-open the CORBA module, make it appear as
-    # just "CORBA", as well as "omniORB.CORBA"
-    if mlist[0] == "CORBA" and sys.modules.has_key("omniORB.CORBA"):
-        sys.modules["CORBA"] = sys.modules["omniORB.CORBA"]
 
     for name in mlist:
         current = current + name
