Added Charm-IDL
authorMilind Bhandarkar <milind@cs.uiuc.edu>
Fri, 22 May 1998 22:05:11 +0000 (22:05 +0000)
committerMilind Bhandarkar <milind@cs.uiuc.edu>
Fri, 22 May 1998 22:05:11 +0000 (22:05 +0000)
178 files changed:
src/arch/cm5/conv-mach.h
src/arch/exemplar-mpi/conv-mach.h
src/arch/exemplar/conv-mach.h
src/arch/ncube2/conv-mach.h
src/arch/net-aix-ppc/conv-mach.h
src/arch/net-hp-cc/conv-mach.csh
src/arch/net-hp-cc/conv-mach.h
src/arch/net-hp/conv-mach.h
src/arch/net-irix-64/conv-mach.h
src/arch/net-irix/conv-mach.h
src/arch/net-linux/conv-mach.h
src/arch/net-sol-cc/conv-mach.h
src/arch/net-sol-smp/conv-mach.h
src/arch/net-sol/conv-mach.h
src/arch/net-sun/conv-mach.h
src/arch/origin-pthreads/conv-mach.h
src/arch/origin2000/conv-mach.h
src/arch/paragon-osf/conv-mach.h
src/arch/paragon-sunmos/conv-mach.h
src/arch/sim-hp/conv-mach.h
src/arch/sim-irix-64/conv-mach.h
src/arch/sim-irix/conv-mach.h
src/arch/sim-linux/conv-mach.h
src/arch/sim-rs6k/conv-mach.h
src/arch/sim-sol/conv-mach.h
src/arch/sim-sun/conv-mach.h
src/arch/sp1/conv-mach.h
src/arch/sp3/conv-mach.h
src/arch/t3d-fm/conv-mach.h
src/arch/t3d/conv-mach.h
src/arch/t3e/conv-mach.h
src/arch/tcp-hp/conv-mach.h
src/arch/tcp-sol/conv-mach.h
src/arch/uth-hp-cc/conv-mach.h
src/arch/uth-hp/conv-mach.h
src/arch/uth-irix-64/conv-mach.h
src/arch/uth-irix/conv-mach.h
src/arch/uth-linux/conv-mach.h
src/arch/uth-rs6k/conv-mach.h
src/arch/uth-sol-cc/conv-mach.h
src/arch/uth-sol/conv-mach.h
src/arch/uth-sun/conv-mach.h
src/scripts/Makefile
src/scripts/charmc
src/xlat-idl/ast.hh [new file with mode: 0644]
src/xlat-idl/ast_argument.cc [new file with mode: 0644]
src/xlat-idl/ast_argument.hh [new file with mode: 0644]
src/xlat-idl/ast_array.cc [new file with mode: 0644]
src/xlat-idl/ast_array.hh [new file with mode: 0644]
src/xlat-idl/ast_attribute.cc [new file with mode: 0644]
src/xlat-idl/ast_attribute.hh [new file with mode: 0644]
src/xlat-idl/ast_check.cc [new file with mode: 0644]
src/xlat-idl/ast_concrete_type.cc [new file with mode: 0644]
src/xlat-idl/ast_concrete_type.hh [new file with mode: 0644]
src/xlat-idl/ast_constant.cc [new file with mode: 0644]
src/xlat-idl/ast_constant.hh [new file with mode: 0644]
src/xlat-idl/ast_decl.cc [new file with mode: 0644]
src/xlat-idl/ast_decl.hh [new file with mode: 0644]
src/xlat-idl/ast_enum.cc [new file with mode: 0644]
src/xlat-idl/ast_enum.hh [new file with mode: 0644]
src/xlat-idl/ast_enum_val.cc [new file with mode: 0644]
src/xlat-idl/ast_enum_val.hh [new file with mode: 0644]
src/xlat-idl/ast_exception.cc [new file with mode: 0644]
src/xlat-idl/ast_exception.hh [new file with mode: 0644]
src/xlat-idl/ast_expression.cc [new file with mode: 0644]
src/xlat-idl/ast_expression.hh [new file with mode: 0644]
src/xlat-idl/ast_extern.hh [new file with mode: 0644]
src/xlat-idl/ast_field.cc [new file with mode: 0644]
src/xlat-idl/ast_field.hh [new file with mode: 0644]
src/xlat-idl/ast_generator.cc [new file with mode: 0644]
src/xlat-idl/ast_generator.hh [new file with mode: 0644]
src/xlat-idl/ast_interface.cc [new file with mode: 0644]
src/xlat-idl/ast_interface.hh [new file with mode: 0644]
src/xlat-idl/ast_interface_fwd.cc [new file with mode: 0644]
src/xlat-idl/ast_interface_fwd.hh [new file with mode: 0644]
src/xlat-idl/ast_module.cc [new file with mode: 0644]
src/xlat-idl/ast_module.hh [new file with mode: 0644]
src/xlat-idl/ast_operation.cc [new file with mode: 0644]
src/xlat-idl/ast_operation.hh [new file with mode: 0644]
src/xlat-idl/ast_predefined_type.cc [new file with mode: 0644]
src/xlat-idl/ast_predefined_type.hh [new file with mode: 0644]
src/xlat-idl/ast_recursive.cc [new file with mode: 0644]
src/xlat-idl/ast_redef.cc [new file with mode: 0644]
src/xlat-idl/ast_root.cc [new file with mode: 0644]
src/xlat-idl/ast_root.hh [new file with mode: 0644]
src/xlat-idl/ast_sequence.cc [new file with mode: 0644]
src/xlat-idl/ast_sequence.hh [new file with mode: 0644]
src/xlat-idl/ast_string.cc [new file with mode: 0644]
src/xlat-idl/ast_string.hh [new file with mode: 0644]
src/xlat-idl/ast_structure.cc [new file with mode: 0644]
src/xlat-idl/ast_structure.hh [new file with mode: 0644]
src/xlat-idl/ast_type.cc [new file with mode: 0644]
src/xlat-idl/ast_type.hh [new file with mode: 0644]
src/xlat-idl/ast_typedef.cc [new file with mode: 0644]
src/xlat-idl/ast_typedef.hh [new file with mode: 0644]
src/xlat-idl/ast_union.cc [new file with mode: 0644]
src/xlat-idl/ast_union.hh [new file with mode: 0644]
src/xlat-idl/ast_union_branch.cc [new file with mode: 0644]
src/xlat-idl/ast_union_branch.hh [new file with mode: 0644]
src/xlat-idl/ast_union_label.cc [new file with mode: 0644]
src/xlat-idl/ast_union_label.hh [new file with mode: 0644]
src/xlat-idl/be.hh [new file with mode: 0644]
src/xlat-idl/be_args.cc [new file with mode: 0644]
src/xlat-idl/be_classes.cc [new file with mode: 0644]
src/xlat-idl/be_classes.hh [new file with mode: 0644]
src/xlat-idl/be_extern.hh [new file with mode: 0644]
src/xlat-idl/be_generator.cc [new file with mode: 0644]
src/xlat-idl/be_generator.hh [new file with mode: 0644]
src/xlat-idl/be_init.cc [new file with mode: 0644]
src/xlat-idl/be_produce.cc [new file with mode: 0644]
src/xlat-idl/drv_args.cc [new file with mode: 0644]
src/xlat-idl/drv_extern.hh [new file with mode: 0644]
src/xlat-idl/drv_fork.cc [new file with mode: 0644]
src/xlat-idl/drv_init.cc [new file with mode: 0644]
src/xlat-idl/drv_link.cc [new file with mode: 0644]
src/xlat-idl/drv_link.hh [new file with mode: 0644]
src/xlat-idl/drv_main.cc [new file with mode: 0644]
src/xlat-idl/drv_preproc.cc [new file with mode: 0644]
src/xlat-idl/drv_private.cc [new file with mode: 0644]
src/xlat-idl/drv_private.hh [new file with mode: 0644]
src/xlat-idl/fe_declarator.cc [new file with mode: 0644]
src/xlat-idl/fe_declarator.hh [new file with mode: 0644]
src/xlat-idl/fe_extern.cc [new file with mode: 0644]
src/xlat-idl/fe_extern.hh [new file with mode: 0644]
src/xlat-idl/fe_init.cc [new file with mode: 0644]
src/xlat-idl/fe_interface_header.cc [new file with mode: 0644]
src/xlat-idl/fe_interface_header.hh [new file with mode: 0644]
src/xlat-idl/fe_private.cc [new file with mode: 0644]
src/xlat-idl/fe_private.hh [new file with mode: 0644]
src/xlat-idl/global_extern.hh [new file with mode: 0644]
src/xlat-idl/idl.hh [new file with mode: 0644]
src/xlat-idl/idl.ll [new file with mode: 0644]
src/xlat-idl/idl.yy [new file with mode: 0644]
src/xlat-idl/idlString.hh [new file with mode: 0644]
src/xlat-idl/idl_bool.hh [new file with mode: 0644]
src/xlat-idl/idl_defines.hh [new file with mode: 0644]
src/xlat-idl/idl_extern.hh [new file with mode: 0644]
src/xlat-idl/idl_fwd.hh [new file with mode: 0644]
src/xlat-idl/idl_global.hh [new file with mode: 0644]
src/xlat-idl/idl_narrow.hh [new file with mode: 0644]
src/xlat-idl/intlmacros.hh [new file with mode: 0644]
src/xlat-idl/lex.yy.cc [new file with mode: 0644]
src/xlat-idl/nr_extern.hh [new file with mode: 0644]
src/xlat-idl/nr_narrow.cc [new file with mode: 0644]
src/xlat-idl/testIdlString.cc [new file with mode: 0644]
src/xlat-idl/util.hh [new file with mode: 0644]
src/xlat-idl/utl_decllist.cc [new file with mode: 0644]
src/xlat-idl/utl_decllist.hh [new file with mode: 0644]
src/xlat-idl/utl_error.cc [new file with mode: 0644]
src/xlat-idl/utl_error.hh [new file with mode: 0644]
src/xlat-idl/utl_exceptlist.cc [new file with mode: 0644]
src/xlat-idl/utl_exceptlist.hh [new file with mode: 0644]
src/xlat-idl/utl_exprlist.cc [new file with mode: 0644]
src/xlat-idl/utl_exprlist.hh [new file with mode: 0644]
src/xlat-idl/utl_global.cc [new file with mode: 0644]
src/xlat-idl/utl_identifier.cc [new file with mode: 0644]
src/xlat-idl/utl_identifier.hh [new file with mode: 0644]
src/xlat-idl/utl_idlist.cc [new file with mode: 0644]
src/xlat-idl/utl_idlist.hh [new file with mode: 0644]
src/xlat-idl/utl_indenter.cc [new file with mode: 0644]
src/xlat-idl/utl_indenter.hh [new file with mode: 0644]
src/xlat-idl/utl_labellist.cc [new file with mode: 0644]
src/xlat-idl/utl_labellist.hh [new file with mode: 0644]
src/xlat-idl/utl_list.cc [new file with mode: 0644]
src/xlat-idl/utl_list.hh [new file with mode: 0644]
src/xlat-idl/utl_namelist.cc [new file with mode: 0644]
src/xlat-idl/utl_namelist.hh [new file with mode: 0644]
src/xlat-idl/utl_scope.cc [new file with mode: 0644]
src/xlat-idl/utl_scope.hh [new file with mode: 0644]
src/xlat-idl/utl_scoped_name.hh [new file with mode: 0644]
src/xlat-idl/utl_stack.cc [new file with mode: 0644]
src/xlat-idl/utl_stack.hh [new file with mode: 0644]
src/xlat-idl/utl_string.cc [new file with mode: 0644]
src/xlat-idl/utl_string.hh [new file with mode: 0644]
src/xlat-idl/utl_strlist.cc [new file with mode: 0644]
src/xlat-idl/utl_strlist.hh [new file with mode: 0644]
src/xlat-idl/y.tab.cc [new file with mode: 0644]
src/xlat-idl/y.tab.hh [new file with mode: 0644]

index 3d88a89f919c12345acaaea84806de6b039390f9..b9cc9eb1de5ff5cb9d07cd18a0ba772e3333cc39 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.38  1998-04-17 17:17:39  milind
+ * Revision 2.39  1998-05-22 22:06:49  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.38  1998/04/17 17:17:39  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.37  1998/02/19 08:39:20  jyelon
 #define CMK_USE_HP_MAIN_FIX                               0
 #define CMK_DONT_USE_HP_MAIN_FIX                          1
 
+#define CPP_LOCATION  "/usr/lib/cpp"
 #endif
 
index a86cc3af5bc1e728cddf5fa7e9db4d2f19bb4c89..873b7957db22104eb23a2e5cc03b44ca9f5f128b 100644 (file)
@@ -97,5 +97,7 @@
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index 5e8dd8e36c0d43d0109439aae12c718f79925db7..c7fd6dab7f9ac54320be51c5b2e34c9b77050a91 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.37  1998-04-17 17:17:41  milind
+ * Revision 2.38  1998-05-22 22:06:50  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.37  1998/04/17 17:17:41  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.36  1998/02/19 08:39:24  jyelon
 #define CMK_USE_HP_MAIN_FIX                               0
 #define CMK_DONT_USE_HP_MAIN_FIX                          1
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index aa00ce496568af5c044ecf976fbd773324473992..a279934ee9f4f406a6a8e434c44a2fbaf98eec3d 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.37  1998-04-17 17:17:42  milind
+ * Revision 2.38  1998-05-22 22:06:53  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.37  1998/04/17 17:17:42  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.36  1998/02/19 08:39:27  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index e9b5403dfd23fb0b3f748938bc0696c6594a6b36..a8fdf1af8bb0c4623aab25ccc804a239348b355d 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.38  1998-04-17 17:17:52  milind
+ * Revision 1.39  1998-05-22 22:07:00  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.38  1998/04/17 17:17:52  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.37  1998/02/19 08:39:37  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 705ea9f1a8e867b3d1721f3e08633c5e94e4bfcb..7602878f07fba868fcc246f582c8eab4fac55d1f 100644 (file)
 # REVISION HISTORY:
 #
 # $Log$
-# Revision 1.9  1997-07-15 21:15:43  jyelon
+# Revision 1.10  1998-05-22 22:06:55  milind
+# Added Charm-IDL
+#
+# Revision 1.9  1997/07/15 21:15:43  jyelon
 # Removed CMK_NM stuff once and for all!
 #
 # Revision 1.8  1997/05/05 14:25:21  jyelon
@@ -71,8 +74,8 @@ set CMK_LIBS='-lqt'
 set CMK_SEQ_LIBS=''
 set CMK_SEQ_CC='cc -Aa -D_HPUX_SOURCE '
 set CMK_SEQ_LD='cc -Aa -D_HPUX_SOURCE '
-set CMK_SEQ_CXX='CC -D_HPUX_SOURCE '
-set CMK_SEQ_LDXX='CC -D_HPUX_SOURCE '
+set CMK_SEQ_CXX='CC -Aa -D_HPUX_SOURCE '
+set CMK_SEQ_LDXX='CC -Aa -D_HPUX_SOURCE '
 set CMK_CPP_SUFFIX="i"
 set CMK_XLATPP='charmxlat++ '
 set CMK_QT='hpux-cc'
index 2a0586d461cdb0dca28c22ff45d4526c347c938e..60aace3313ec8565b834e3764060c92041833b49 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.29  1998-04-17 17:17:45  milind
+ * Revision 1.30  1998-05-22 22:06:56  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.29  1998/04/17 17:17:45  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.28  1998/03/04 17:17:19  milind
 #define CMK_USE_HP_MAIN_FIX                                1
 #define CMK_DONT_USE_HP_MAIN_FIX                           0
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index 0a8268110bc10005f434e0cfa748d0387dac3bed..1622555f6e4a3b2571b65e465c86c50dcd7b2443 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.42  1998-04-17 17:17:47  milind
+ * Revision 2.43  1998-05-22 22:06:54  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.42  1998/04/17 17:17:47  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.41  1998/02/19 08:39:29  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index f10dfa0aabe9cbed3be0430b1e3b2968f7bfcfcd..b2d2e2fdf001bc365d5e3c9343118b0024d78fa9 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.8  1998-04-17 17:17:49  milind
+ * Revision 1.9  1998-05-22 22:06:58  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.8  1998/04/17 17:17:49  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.7  1998/02/19 08:39:34  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 01e92bb16274529a51f383a0f567a9492195d991..87bf6c92fca4712c0fe25e6811a62f7cdcb7e84a 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.17  1998-04-17 17:17:50  milind
+ * Revision 1.18  1998-05-22 22:06:57  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.17  1998/04/17 17:17:50  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.16  1998/02/19 08:39:32  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 9223a77e2b53355d2f13869083a0cddac25af6df..7f451d957047a92bd83412eac3579a547a0b6f1e 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.5  1998-04-17 17:17:51  milind
+ * Revision 1.6  1998-05-22 22:06:59  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.5  1998/04/17 17:17:51  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.4  1998/03/16 19:52:53  milind
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index 6c8a91d3344b90eaf76cd6e6e45476153a2c168e..3f71491692a91bd8a9821c83c7629c20d8a79715 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.18  1998-04-17 17:17:53  milind
+ * Revision 1.19  1998-05-22 22:07:03  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.18  1998/04/17 17:17:53  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.17  1998/02/19 08:39:40  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/ccs/lib/cpp"
+
 #endif
 
index 39290d4d390839edc420fa1d287b4e519885ff1e..b5f88e34ecec181b43fddddc230ffc4fbbc70c3f 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.15  1998-04-17 17:17:55  milind
+ * Revision 1.16  1998-05-22 22:07:04  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.15  1998/04/17 17:17:55  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.14  1998/02/19 08:39:42  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/ccs/lib/cpp"
+
 #endif
 
index 17f54f780501d1f6487045b406974218fedb6a15..e7b9b7dceaad10556800bf4808b0d851472a39f5 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.44  1998-04-17 17:17:56  milind
+ * Revision 2.45  1998-05-22 22:07:01  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.44  1998/04/17 17:17:56  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.43  1998/02/19 08:39:39  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/ccs/lib/cpp"
+
 #endif
 
index 81e1379c2ab5e742e5bb18e0badec3991752f604..fded0efca492a2fc40cbfee4a3a0b783518981eb 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.41  1998-04-17 17:17:58  milind
+ * Revision 2.42  1998-05-22 22:07:05  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.41  1998/04/17 17:17:58  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.40  1998/02/19 08:39:46  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 6aba0428e1cdc48bc2285a2040c2182eba8ac7fb..cb1448788e1d428dc9882f443b59bfe51eabb8d6 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.5  1998-04-17 17:17:59  milind
+ * Revision 1.6  1998-05-22 22:07:06  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.5  1998/04/17 17:17:59  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.4  1998/02/19 08:39:49  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 38e2a19e5f86c6632f75f3e01646180e87c74020..303c7284334ca847b3245b4873f8e9f60ff8e53a 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.10  1998-04-17 17:18:00  milind
+ * Revision 1.11  1998-05-22 22:07:07  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.10  1998/04/17 17:18:00  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.9  1998/02/19 08:39:52  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index df36edfb185df72deeab1e2aab07d69c63422200..6d3f3fc44f47fcfb8593c3320a698e628f2f04fc 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.24  1998-04-17 17:18:01  milind
+ * Revision 1.25  1998-05-22 22:07:08  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.24  1998/04/17 17:18:01  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.23  1998/02/19 08:39:55  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index fc5423565d471894acced444578e97e160a5bb41..e18625ddad6c7c799aa4e291f4408e161c7e13d3 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.24  1998-04-17 17:18:03  milind
+ * Revision 1.25  1998-05-22 22:07:10  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.24  1998/04/17 17:18:03  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.23  1998/02/19 08:39:57  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 6526379d693c80efaa5cef66f256beb11a153408..592162ae8f9c0d64c21764f17f314006745a2281 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.29  1998-04-17 17:18:05  milind
+ * Revision 1.30  1998-05-22 22:07:11  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.29  1998/04/17 17:18:05  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.28  1998/02/19 08:40:01  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index f483247b62dee32657d3f34850d0dbc8e7f1bcd9..26108d401f4020941489931ba0264339691858e5 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.8  1998-04-17 17:18:08  milind
+ * Revision 1.9  1998-05-22 22:07:14  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.8  1998/04/17 17:18:08  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.7  1998/02/19 08:40:05  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 6713d62b48e24f95774f886a842bc2a30530a897..2a30b15f925f340220fdb3e15d374ac7566f9a8e 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.8  1998-04-17 17:18:09  milind
+ * Revision 1.9  1998-05-22 22:07:12  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.8  1998/04/17 17:18:09  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.7  1998/02/19 08:40:03  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 7344f5381e007df819ad23d7cc91c484f4e52a57..a9b633470e722fa0aaa4d1b3d0e062d4646dc7f0 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.5  1998-05-03 11:03:56  milind
+ * Revision 1.6  1998-05-22 22:07:15  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.5  1998/05/03 11:03:56  milind
  * Fixed some linux-specific bugs.
  *
  * Revision 1.4  1998/04/17 17:18:10  milind
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index 54cb79e863b454ea2de0333c7ae1e22c85a7cc77..bae3becb8cd979531f796eb4967a70b9b79d2f76 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.28  1998-04-17 17:18:13  milind
+ * Revision 1.29  1998-05-22 22:07:16  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.28  1998/04/17 17:18:13  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.27  1998/02/19 08:40:11  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 3981edef0be28022a15b7641a603d116bddd6907..1d9c24b9126ebe41ef3858d3db893c4e2f757f39 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.28  1998-04-17 17:18:14  milind
+ * Revision 1.29  1998-05-22 22:07:17  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.28  1998/04/17 17:18:14  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.27  1998/02/19 08:40:13  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/ccs/lib/cpp"
+
 #endif
 
index 9c960e3f72af731f8227134781817cc28c7f45a4..21ead5b7ba60cb3bea9719930aab033940ccdd09 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.28  1998-04-17 17:18:16  milind
+ * Revision 1.29  1998-05-22 22:07:19  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.28  1998/04/17 17:18:16  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.27  1998/02/19 08:40:16  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 307efd061dd2cbd853cb92760e4fff2856056b4a..5252e05c950663015136a5a8e8f49fd82c8ad4aa 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.36  1998-04-17 17:18:18  milind
+ * Revision 2.37  1998-05-22 22:07:20  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.36  1998/04/17 17:18:18  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.35  1998/02/19 08:40:19  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 6fc99bb022efeaabbdb0ab9cd3d163588b166872..2741f247fb9e98246f409fbaa57d6975ce42c4b8 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.9  1998-04-17 17:18:20  milind
+ * Revision 1.10  1998-05-22 22:07:21  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.9  1998/04/17 17:18:20  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.8  1998/03/05 17:15:06  milind
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 5c6a6a4901a29ad3c8eb9643e4fc3a934a68eda0..6bc89c20cb6b5767db2c5945c34fbe46d14b2903 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.4  1998-04-17 17:18:21  milind
+ * Revision 1.5  1998-05-22 22:07:23  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.4  1998/04/17 17:18:21  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.3  1998/02/19 08:40:28  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 45df283bae618b4dbdc5fff0f51747c2be5db6a6..5d23643ab7e73db1d87e1b88d5e933e5107701fd 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.26  1998-04-17 17:18:23  milind
+ * Revision 1.27  1998-05-22 22:07:22  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.26  1998/04/17 17:18:23  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.25  1998/02/19 08:40:25  jyelon
 #define CMK_USE_HP_MAIN_FIX                                1
 #define CMK_DONT_USE_HP_MAIN_FIX                           0
 
+#define CPP_LOCATION "cpp"
+
 #endif
 
index 9c75dcf3da1ae5315735da9f79c0cae56c3b75f1..02a860db53e7076fea99ea68a96e87e36b3f9d98 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.9  1998-04-17 17:18:24  milind
+ * Revision 1.10  1998-05-22 22:07:25  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.9  1998/04/17 17:18:24  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.8  1998/02/23 18:12:01  rbrunner
 #define CMK_USE_HP_MAIN_FIX                                1
 #define CMK_DONT_USE_HP_MAIN_FIX                           0
 
+#define CPP_LOCATION "cpp"
+
 #endif
 
index 9955644d8dd47a4c5179d8ab412adb7105f69627..06a42dd9caccbc86000fa02826c4fb13037bce99 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.43  1998-04-17 17:18:26  milind
+ * Revision 2.44  1998-05-22 22:07:26  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.43  1998/04/17 17:18:26  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.42  1998/02/19 08:40:34  jyelon
 #define CMK_USE_HP_MAIN_FIX                                1
 #define CMK_DONT_USE_HP_MAIN_FIX                           0
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index e5488823ff5308277940c03eda64595f663c551d..179892a12d2f232fbfa72de47e8cecf7a0cda242 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 2.42  1998-04-17 17:18:27  milind
+ * Revision 2.43  1998-05-22 22:07:27  milind
+ * Added Charm-IDL
+ *
+ * Revision 2.42  1998/04/17 17:18:27  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 2.41  1998/02/19 08:40:39  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/ccs/lib/cpp"
+
 #endif
 
index 15b5ccd2bdc7a7e3ad20811792ec2163f3267bf9..26e71fb971b80e918756138a3c152fbaca9eefd6 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.19  1998-04-17 17:18:28  milind
+ * Revision 1.20  1998-05-22 22:07:29  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.19  1998/04/17 17:18:28  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.18  1998/02/19 08:40:47  jyelon
 #define CMK_USE_HP_MAIN_FIX                               1
 #define CMK_DONT_USE_HP_MAIN_FIX                          0
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index 13999ea18936f8a0d91f36827be506a41512b212..d9c3a9507530185d88b24195fcda6d8d668790c2 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.32  1998-04-17 17:18:30  milind
+ * Revision 1.33  1998-05-22 22:07:28  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.32  1998/04/17 17:18:30  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.31  1998/02/19 08:40:44  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index 7c91bffdef55f9a886512dbe77497b12c931b60b..3428770e64295b319ab7d34c2cb1ac41865632f4 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.8  1998-04-17 17:18:31  milind
+ * Revision 1.9  1998-05-22 22:07:32  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.8  1998/04/17 17:18:31  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.7  1998/02/19 08:40:52  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 084693a6f6e44a37067115db263c09da3e779181..710c453063e66723fe7a9b40c3724446a31ce628 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.13  1998-04-17 17:18:32  milind
+ * Revision 1.14  1998-05-22 22:07:30  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.13  1998/04/17 17:18:32  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.12  1998/02/19 08:40:50  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 7b69e0343dbe70591b95fe918a1281eaeab3bb88..dd8f9bc0c1804fc2db6aab4cd16b3ad9a353f919 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.7  1998-05-03 11:03:58  milind
+ * Revision 1.8  1998-05-22 22:07:33  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.7  1998/05/03 11:03:58  milind
  * Fixed some linux-specific bugs.
  *
  * Revision 1.6  1998/04/17 17:18:33  milind
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/lib/cpp"
+
 #endif
 
index 5d5cec6ad5b91e7ed108a28fc03109db45fcbf61..424ffc4c7e6767278517cb9c727fcf819f0aab53 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.34  1998-04-17 17:18:35  milind
+ * Revision 1.35  1998-05-22 22:07:34  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.34  1998/04/17 17:18:35  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.33  1998/02/19 08:40:58  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 1d9c8c8541e746ce654a9f38acfb84821492435e..340b282dd8cb024ac7906ca18a3de600d13be011 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.19  1998-04-17 17:18:36  milind
+ * Revision 1.20  1998-05-22 22:07:36  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.19  1998/04/17 17:18:36  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.18  1998/02/19 08:41:04  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/ccs/lib/cpp"
+
 #endif
 
index 8f9d60492e9b637fa1448bcd7d1c74a2d7e92dad..e9ded46ead9dc778340a1d7aad83622069693507 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.34  1998-04-17 17:18:37  milind
+ * Revision 1.35  1998-05-22 22:07:35  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.34  1998/04/17 17:18:37  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.33  1998/02/19 08:41:01  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/ccs/lib/cpp"
+
 #endif
 
index 7c381bd780bc9340a131e20e6c26dda951c23a71..aefc3d9632409e83c02d5e97f134102c2cf823eb 100644 (file)
@@ -8,7 +8,10 @@
  ***************************************************************************
  *
  * $Log$
- * Revision 1.35  1998-04-17 17:18:39  milind
+ * Revision 1.36  1998-05-22 22:07:37  milind
+ * Added Charm-IDL
+ *
+ * Revision 1.35  1998/04/17 17:18:39  milind
  * Added CMK_CCS_AVAILABLE flag.
  *
  * Revision 1.34  1998/02/19 08:41:08  jyelon
 #define CMK_USE_HP_MAIN_FIX                                0
 #define CMK_DONT_USE_HP_MAIN_FIX                           1
 
+#define CPP_LOCATION "/usr/lib/cpp"
+
 #endif
 
index 414605f88b27ef47f33e1fb47060b48d070a2d19..d2ed04c89e9a1a08f8666337b8d7324983f13c21 100644 (file)
@@ -27,7 +27,7 @@ all: charm++ smsg pvm sdag
 
 charm: converse charmxlat charmlibs libcharm
 
-charm++: converse charmxlat charmlibs charmxlat++ charmfilter++ charmxi libcharm libck-cplus-y.a libck-defmain-cpp.a
+charm++: converse charmxlat charmlibs charmxlat++ charmfilter++ charmxi charmidl libcharm libck-cplus-y.a libck-defmain-cpp.a
 
 smsg: converse libsimplemsg.a
 
@@ -35,7 +35,7 @@ pvm: converse libpvmc.a
 
 sdag: charm++ sdagx libsdag.a
 
-translators: sdagx charmxlat charmfilter charmxlat++ charmfilter++ charmxi conv-cpm
+translators: sdagx charmxlat charmfilter charmxlat++ charmfilter++ charmxi conv-cpm charmidl
 
 test-all: all
        (cd ../pgms ; make test-all)
@@ -102,6 +102,7 @@ dirs+sources:
        ./gatherflat ../../src/Common/xlat             .
        ./gatherflat ../../src/Common/xlat++           .
        ./gatherflat ../../src/Common/xlat-i           .
+       ./gatherflat ../../src/Common/xlat-idl         .
        ./gatherflat ../../src/Common/xlatcpm          .
        ./gathertree ../../src/QuickThreads QuickThreads
        ./gatherflat ../../src/Common.`cat .gdir`      .
@@ -110,6 +111,7 @@ dirs+sources:
        ./gathertree ../../src/Common/xlat    ../src/xlat
        ./gathertree ../../src/Common/xlat++  ../src/xlat++
        ./gathertree ../../src/Common/xlat-i  ../src/xlat-i
+       ./gathertree ../../src/Common/xlat-idl  ../src/xlat-idl
        ./gathertree ../../src/Common/xlatcpm ../src/xlatcpm
        ./gathertree ../../pgms ../pgms
        ln -s ../../src/Common/scripts/Makefile ../src
@@ -625,6 +627,269 @@ CParseNodeProcess.o: CParseNodeProcess.C CParseNode.h
 CEntry.o: CEntry.C CEntry.h
        $(SEQCHARMC) -c CEntry.C
 
+###############################################################################
+#
+# Charm++ IDL
+#
+###############################################################################
+
+IDL_CFE_VERSION =       \"1.3.0\"
+CPPFLAGS = -I. -DIDL_CFE_VERSION=$(IDL_CFE_VERSION)
+IDLCHARMC = $(SEQCHARMC) $(CPPFLAGS)
+CCFLAGS  = -g
+RANLIB          = /bin/true
+AR              = ar
+ARFLAGS         = crv
+
+drv_init.o: drv_init.cc
+       $(IDLCHARMC) drv_init.cc
+
+drv_private.o: drv_private.cc
+       $(IDLCHARMC) drv_private.cc
+
+drv_main.o: drv_main.cc
+       $(IDLCHARMC) drv_main.cc
+
+drv_args.o: drv_args.cc
+       $(IDLCHARMC) drv_args.cc
+
+drv_fork.o: drv_fork.cc
+       $(IDLCHARMC) drv_fork.cc
+
+drv_link.o: drv_link.cc
+       $(IDLCHARMC) drv_link.cc
+
+drv_preproc.o: drv_preproc.cc
+       $(IDLCHARMC) drv_preproc.cc
+
+libdrv.a: drv_init.o drv_private.o drv_main.o drv_args.o drv_fork.o \
+          drv_link.o drv_preproc.o
+       $(AR) $(ARFLAGS) libdrv.a drv_init.o drv_private.o drv_main.o \
+               drv_args.o drv_fork.o drv_link.o drv_preproc.o
+       $(RANLIB) $@
+
+# Create the parser and lexer
+
+fe_declarator.o: fe_declarator.cc
+       $(IDLCHARMC) fe_declarator.cc
+
+fe_private.o: fe_private.cc
+       $(IDLCHARMC) fe_private.cc
+
+fe_init.o: fe_init.cc
+       $(IDLCHARMC) fe_init.cc
+
+fe_extern.o: fe_extern.cc
+       $(IDLCHARMC) fe_extern.cc
+
+fe_interface_header.o: fe_interface_header.cc
+       $(IDLCHARMC) fe_interface_header.cc
+
+y.tab.o: y.tab.cc
+       $(IDLCHARMC) y.tab.cc
+
+lex.yy.o: lex.yy.cc
+       $(IDLCHARMC) lex.yy.cc
+
+libfe.a: fe_declarator.o fe_init.o fe_extern.o fe_interface_header.o  \
+         y.tab.o lex.yy.o
+       $(AR) $(ARFLAGS) libfe.a fe_declarator.o fe_init.o fe_extern.o \
+               fe_interface_header.o y.tab.o lex.yy.o
+       $(RANLIB) libfe.a
+
+be_generator.o: be_generator.cc be.hh be_generator.hh be_classes.hh
+       $(IDLCHARMC) be_generator.cc 
+
+be_classes.o: be_classes.cc be.hh be_generator.hh be_classes.hh
+       $(IDLCHARMC) be_classes.cc
+
+be_init.o: be_init.cc be.hh be_generator.hh be_classes.hh
+       $(IDLCHARMC) be_init.cc 
+
+be_produce.o: be_produce.cc be.hh be_generator.hh be_classes.hh
+       $(IDLCHARMC) be_produce.cc
+
+be_args.o: be_args.cc be.hh be_generator.hh be_classes.hh
+       $(IDLCHARMC) be_args.cc
+
+libbe.a: be_generator.o be_classes.o be_init.o be_produce.o be_args.o
+       $(AR) $(ARFLAGS) libbe.a be_generator.o be_classes.o \
+               be_init.o be_produce.o be_args.o
+       $(RANLIB) libbe.a
+
+ast_array.o: ast_array.cc
+       $(IDLCHARMC) ast_array.cc
+
+ast_argument.o: ast_argument.cc
+       $(IDLCHARMC) ast_argument.cc
+
+ast_attribute.o: ast_attribute.cc
+       $(IDLCHARMC) ast_attribute.cc
+
+ast_check.o: ast_check.cc
+       $(IDLCHARMC) ast_check.cc
+
+ast_concrete_type.o: ast_concrete_type.cc
+       $(IDLCHARMC) ast_concrete_type.cc
+
+ast_constant.o: ast_constant.cc
+       $(IDLCHARMC) ast_constant.cc
+
+ast_decl.o: ast_decl.cc
+       $(IDLCHARMC) ast_decl.cc
+
+ast_enum.o: ast_enum.cc
+       $(IDLCHARMC) ast_enum.cc
+
+ast_enum_val.o: ast_enum_val.cc
+       $(IDLCHARMC) ast_enum_val.cc
+
+ast_exception.o: ast_exception.cc
+       $(IDLCHARMC) ast_exception.cc
+
+ast_expression.o: ast_expression.cc
+       $(IDLCHARMC) ast_expression.cc
+
+ast_field.o: ast_field.cc
+       $(IDLCHARMC) ast_field.cc
+
+ast_interface.o: ast_interface.cc
+       $(IDLCHARMC)  ast_interface.cc
+
+ast_interface_fwd.o: ast_interface_fwd.cc
+       $(IDLCHARMC) ast_interface_fwd.cc
+
+ast_module.o: ast_module.cc
+       $(IDLCHARMC) ast_module.cc
+
+ast_operation.o: ast_operation.cc
+       $(IDLCHARMC) ast_operation.cc
+
+ast_predefined_type.o: ast_predefined_type.cc
+       $(IDLCHARMC) ast_predefined_type.cc
+
+ast_root.o: ast_root.cc
+       $(IDLCHARMC) ast_root.cc
+
+ast_sequence.o: ast_sequence.cc
+       $(IDLCHARMC) ast_sequence.cc
+
+ast_string.o: ast_string.cc
+       $(IDLCHARMC) ast_string.cc
+
+ast_structure.o: ast_structure.cc
+       $(IDLCHARMC) ast_structure.cc
+
+ast_type.o: ast_type.cc
+       $(IDLCHARMC) ast_type.cc
+
+ast_typedef.o: ast_typedef.cc
+       $(IDLCHARMC) ast_typedef.cc
+
+ast_union.o: ast_union.cc
+       $(IDLCHARMC) ast_union.cc
+
+ast_union_branch.o: ast_union_branch.cc
+       $(IDLCHARMC) ast_union_branch.cc
+
+ast_union_label.o: ast_union_label.cc
+       $(IDLCHARMC) ast_union_label.cc
+
+ast_generator.o: ast_generator.cc
+       $(IDLCHARMC) ast_generator.cc
+
+ast_redef.o: ast_redef.cc
+       $(IDLCHARMC) ast_redef.cc
+
+ast_recursive.o: ast_recursive.cc
+       $(IDLCHARMC) ast_recursive.cc
+
+libast.a: ast_array.o ast_argument.o ast_attribute.o ast_check.o \
+          ast_concrete_type.o ast_constant.o ast_decl.o ast_enum.o \
+          ast_enum_val.o ast_exception.o ast_expression.o ast_field.o \
+          ast_interface.o ast_interface_fwd.o ast_module.o ast_operation.o \
+          ast_predefined_type.o ast_root.o ast_sequence.o ast_string.o \
+          ast_structure.o ast_type.o ast_typedef.o ast_union.o \
+          ast_union_branch.o ast_union_label.o ast_generator.o ast_redef.o \
+          ast_recursive.o
+       $(AR) $(ARFLAGS) libast.a ast_array.o ast_argument.o ast_attribute.o \
+               ast_check.o ast_concrete_type.o ast_constant.o ast_decl.o \
+               ast_enum.o ast_enum_val.o ast_exception.o ast_expression.o \
+               ast_field.o ast_interface.o ast_interface_fwd.o ast_module.o \
+               ast_operation.o ast_predefined_type.o ast_root.o \
+               ast_sequence.o ast_string.o ast_structure.o ast_type.o \
+               ast_typedef.o ast_union.o ast_union_branch.o \
+               ast_union_label.o ast_generator.o ast_redef.o ast_recursive.o
+       $(RANLIB) $@
+
+utl_scope.o: utl_scope.cc
+       $(IDLCHARMC) utl_scope.cc
+
+utl_stack.o: utl_stack.cc
+       $(IDLCHARMC) utl_stack.cc
+
+utl_string.o: utl_string.cc
+       $(IDLCHARMC) utl_string.cc
+
+utl_decllist.o: utl_decllist.cc
+       $(IDLCHARMC) utl_decllist.cc
+
+utl_labellist.o: utl_labellist.cc
+       $(IDLCHARMC) utl_labellist.cc
+
+utl_namelist.o: utl_namelist.cc
+       $(IDLCHARMC) utl_namelist.cc
+
+utl_exceptlist.o: utl_exceptlist.cc
+       $(IDLCHARMC) utl_exceptlist.cc
+
+utl_strlist.o: utl_strlist.cc
+       $(IDLCHARMC) utl_strlist.cc
+
+utl_list.o: utl_list.cc
+       $(IDLCHARMC) utl_list.cc
+
+utl_exprlist.o: utl_exprlist.cc
+       $(IDLCHARMC) utl_exprlist.cc
+
+utl_error.o: utl_error.cc
+       $(IDLCHARMC) utl_error.cc
+
+utl_indenter.o: utl_indenter.cc
+       $(IDLCHARMC) utl_indenter.cc
+
+utl_identifier.o: utl_identifier.cc
+       $(IDLCHARMC) utl_identifier.cc
+
+utl_idlist.o: utl_idlist.cc
+       $(IDLCHARMC) utl_idlist.cc
+
+utl_global.o: utl_global.cc
+       $(IDLCHARMC) utl_global.cc
+
+libutil.a: utl_scope.o utl_stack.o utl_string.o utl_decllist.o \
+           utl_labellist.o utl_namelist.o utl_exceptlist.o utl_strlist.o \
+           utl_list.o utl_exprlist.o utl_error.o utl_indenter.o \
+           utl_identifier.o utl_idlist.o utl_global.o
+       $(AR) $(ARFLAGS) libutil.a  utl_scope.o utl_stack.o utl_string.o \
+               utl_decllist.o utl_labellist.o utl_namelist.o \
+               utl_exceptlist.o utl_strlist.o utl_list.o utl_exprlist.o \
+               utl_error.o utl_indenter.o utl_identifier.o utl_idlist.o \
+               utl_global.o
+       $(RANLIB) libutil.a
+
+nr_narrow.o: nr_narrow.cc
+       $(IDLCHARMC) nr_narrow.cc
+
+libnarrow.a: nr_narrow.o
+       $(AR) $(ARFLAGS) libnarrow.a nr_narrow.o
+       $(RANLIB) libnarrow.a
+
+charmidl: libdrv.a libbe.a libfe.a libast.a libutil.a libnarrow.a
+       $(IDLCHARMC) -o charmidl -language c++ -cp ../bin libdrv.a libbe.a \
+               libfe.a libast.a libutil.a libnarrow.a
+
+
 ###############################################################################
 #
 # Make clean
index b151a0d0f43428dc34221888cf2104194477ddcb..59f7ace668b2d3236f28ffe822b4265293eff1a9 100755 (executable)
@@ -558,6 +558,14 @@ foreach FILE ($FILES)
         set OBJECTFILES=( $OBJECTFILES $BASE.o )
       endif
       breaksw
+    case "*.cc"
+      ($ECHOCMD ; $CMK_CXX $OPTS_CXX -I$CHARMINC -c $BASE.cc -o $BASE.o)
+      if ($status) goto failure
+      if ($?OBJECT) then
+       if ($OBJECT != $BASE.o) set DELETE=( $DELETE $BASE.o )
+        set OBJECTFILES=( $OBJECTFILES $BASE.o )
+      endif
+      breaksw
     case "*.cxx"
       ($ECHOCMD ; $CMK_CXX $OPTS_CXX -I$CHARMINC -c $BASE.cxx -o $BASE.o)
       if ($status) goto failure
diff --git a/src/xlat-idl/ast.hh b/src/xlat-idl/ast.hh
new file mode 100644 (file)
index 0000000..4aa5451
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_AST_HH
+#define _AST_AST_HH
+
+// #pragma ident "%@(#)ast.h   1.41% %92/06/10% Sun Microsystems"
+
+// ast.h
+//
+// Defines the classes which constitute the agreement between the CFE
+// and BEs.
+
+/*
+** DEPENDENCIES: NONE
+**
+** USE: Included from idl.hh
+*/
+
+#include       "utl_scoped_name.hh"    // Define UTL_ScopedName
+
+#include       "ast_decl.hh"           // class AST_Decl
+
+#include       "ast_expression.hh"     // class AST_Expression
+
+#include       "utl_scope.hh"          // class UTL_Scope
+
+#include       "ast_type.hh"           // class AST_Type
+#include       "ast_concrete_type.hh"  // class AST_ConcreteType
+#include       "ast_predefined_type.hh"// class AST_PredefinedType
+#include       "ast_module.hh"         // class AST_Module
+#include       "ast_root.hh"           // class AST_Root
+#include       "ast_interface.hh"      // class AST_Interface
+#include       "ast_interface_fwd.hh"  // class AST_InterfaceFwd
+#include       "ast_structure.hh"      // class AST_Structure
+#include       "ast_exception.hh"      // class AST_Exception
+#include       "ast_enum.hh"           // class AST_Enum
+#include       "ast_operation.hh"      // class AST_Operation
+#include       "ast_field.hh"          // class AST_Field
+#include       "ast_argument.hh"       // class AST_Argument
+#include       "ast_attribute.hh"      // class AST_Attribute
+#include       "ast_union.hh"          // class AST_Union
+#include       "ast_union_branch.hh"   // class AST_UnionBranch
+#include       "ast_union_label.hh"    // class AST_UnionLabel
+#include       "ast_constant.hh"       // class AST_Constant
+#include       "ast_enum_val.hh"       // class AST_EnumVal
+#include       "ast_array.hh"          // class AST_Array
+#include       "ast_sequence.hh"       // class AST_Sequence
+#include       "ast_string.hh"         // class AST_String
+#include       "ast_typedef.hh"        // class AST_Typedef 
+
+#include       "utl_list.hh"           // class UTL_List
+#include       "utl_strlist.hh"        // class UTL_StrList
+#include       "utl_exprlist.hh"       // class UTL_ExprList
+
+#include       "ast_generator.hh"      // class AST_Generator
+
+#endif           // _AST_AST_HH
diff --git a/src/xlat-idl/ast_argument.cc b/src/xlat-idl/ast_argument.cc
new file mode 100644 (file)
index 0000000..bf0a420
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_argument.cc 1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_argument.cc - Implementation of class AST_Argument.cc
+ *
+ * AST_Argument nodes denote arguments to an operation. They
+ * are AST_Fields with directions. Thus, they have a name
+ * (an UTL_ScopedName) and a type (a subclass of AST_Type).
+ * Additionally they have a direction field which takes values
+ * from the enum AST_Argument::Direction.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Static functions
+ */
+
+/*
+ * Convert an enum Direction value to a char *
+ */
+static char *
+direction_to_string(AST_Argument::Direction d)
+{
+  switch (d) {
+  case AST_Argument::dir_IN:
+    return "in";
+  case AST_Argument::dir_OUT:
+    return "out";
+  case AST_Argument::dir_INOUT:
+    return "inout";
+  }
+}
+
+/*
+ * Constructor(s) and destructor
+ */
+
+AST_Argument::AST_Argument()
+           : pd_direction(dir_IN)
+{
+}
+
+AST_Argument::AST_Argument(Direction d, AST_Type *ft, UTL_ScopedName *n,
+                          UTL_StrList *p)
+          : AST_Field(AST_Decl::NT_argument, ft, n, p),
+            AST_Decl(AST_Decl::NT_argument, n, p),
+            pd_direction(d)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Dump this AST_Argument node to the ostream o
+ */
+void
+AST_Argument::dump(ostream &o)
+{
+  o << direction_to_string(pd_direction) << " ";
+  AST_Field::dump(o);
+}
+
+/*
+ * Data accessors
+ */
+
+const AST_Argument::Direction
+AST_Argument::direction()
+{
+  return pd_direction;
+}
+
+/*
+ * Narrowing operations
+ */
+IMPL_NARROW_METHODS1(AST_Argument, AST_Field)
+IMPL_NARROW_FROM_DECL(AST_Argument)
diff --git a/src/xlat-idl/ast_argument.hh b/src/xlat-idl/ast_argument.hh
new file mode 100644 (file)
index 0000000..924ef7a
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_ARGUMENT_AST_ARGUMENT_HH
+#define _AST_ARGUMENT_AST_ARGUMENT_HH
+
+// #pragma ident "%@(#)AST_Argument.h  1.37% %92/06/10% Sun Microsystems"
+
+// Representation of argument to operation:
+//
+// An argument is a field with a direction attached
+
+/*
+** DEPENDENCIES: ast_field.hh, utl_scoped_name.hh, ast_type.hh
+**              utl_strlist.hh, ast_decl.hh
+**
+** USE: Included from ast.hh
+*/
+
+#include       "idl_fwd.hh"
+#include       "idl_narrow.hh"
+#include       "ast_field.hh"
+
+
+class  AST_Argument : public virtual AST_Field
+{
+public:
+  // Define enum with values denoting argument passing directions
+  enum Direction {dir_IN, dir_OUT, dir_INOUT};
+
+  // Operations
+
+  // Constructor(s)
+  AST_Argument();
+  AST_Argument(Direction direction, AST_Type *ft, UTL_ScopedName *n,
+              UTL_StrList *p);
+  virtual ~AST_Argument() {}
+
+  // Data Accessors
+  const Direction direction();
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_Argument, AST_Field);
+  DEF_NARROW_FROM_DECL(AST_Argument);
+
+  // AST Dumping
+  virtual void         dump(ostream &o);
+
+private:
+  // Data
+  const Direction      pd_direction;   // Argument direction
+};
+
+#endif           // _AST_ARGUMENT_AST_ARGUMENT_HH
diff --git a/src/xlat-idl/ast_array.cc b/src/xlat-idl/ast_array.cc
new file mode 100644 (file)
index 0000000..3830f31
--- /dev/null
@@ -0,0 +1,187 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_array.cc    1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_array.cc - Implementation of class AST_Array
+ *
+ * AST_Array nodes denote array type and field modifiers.
+ * AST_Array nodes have a list of dimensions (a UTL_ExprList)
+ * a count of the number of dimensions and a base type (a
+ * subtype of AST_ConcreteType. This means that we cannot have
+ * arrays of AST_Interfaces???
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+      
+/*
+ * Constructor(s) and destructor
+ */
+AST_Array::AST_Array()
+        : pd_n_dims(0), pd_base_type(NULL), pd_dims(NULL)
+{
+}
+
+AST_Array::AST_Array(UTL_ScopedName *n, unsigned long nd, UTL_ExprList *ds)
+        : pd_n_dims(nd), pd_base_type(NULL),
+          AST_Decl(AST_Decl::NT_array, n, NULL)
+{
+  pd_dims = compute_dims(ds, nd);
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Compute how many dimensions there are and collect their expressions
+ * into an array
+ */
+AST_Expression **
+AST_Array::compute_dims(UTL_ExprList *ds, unsigned long nds)
+{
+  AST_Expression       **result;
+  UTL_ExprlistActiveIterator *l;
+  long         i;
+
+  if (ds == NULL)
+    return NULL;
+
+  result = new AST_Expression *[nds];
+  l      = new UTL_ExprlistActiveIterator(ds);
+
+  for (i = 0; !(l->is_done()) && i < nds; l->next(), i++)
+    result[i] = l->item();
+  delete l;
+  return result;
+}
+
+/*
+ * Public operations
+ */
+
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Dump this AST_Array node to the ostream o
+ */
+void
+AST_Array::dump(ostream &o)
+{
+  long i;
+
+  pd_base_type->dump(o);
+  o << " ";
+  local_name()->dump(o);
+  for (i = 0; i < pd_n_dims; i++) {
+    o << "[";
+    pd_dims[i]->dump(o);
+    o << "]";
+  }
+}
+
+/*
+ * Data accessors
+ */
+const unsigned long 
+AST_Array::n_dims()
+{
+  return pd_n_dims;
+}
+
+AST_Expression **
+AST_Array::dims()
+{
+  return pd_dims;
+}
+
+AST_Type *
+AST_Array::base_type()
+{
+  return pd_base_type;
+}
+
+void 
+AST_Array::set_base_type(AST_Type *nbt)
+{
+  pd_base_type = nbt;
+}
+
+void
+AST_Array::set_dims(AST_Expression **ds, unsigned long nds)
+{
+    pd_dims = ds;
+    pd_n_dims = nds;
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS1(AST_Array, AST_ConcreteType)
+IMPL_NARROW_FROM_DECL(AST_Array)
diff --git a/src/xlat-idl/ast_array.hh b/src/xlat-idl/ast_array.hh
new file mode 100644 (file)
index 0000000..a088eec
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_ARRAY_AST_ARRAY_HH
+#define _AST_ARRAY_AST_ARRAY_HH
+
+// #pragma ident "%@(#)AST_Array.h     1.37% %92/06/10% Sun Microsystems"
+
+// Representation of array declaration:
+//
+// An array is a combination of a list of dimensions and a base type
+
+/*
+** DEPENDENCIES: ast_concrete_type.hh, utl_exprlist.hh, ast_type.hh,
+**              ast_decl.hh
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_Array : public virtual AST_ConcreteType {
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_Array();
+  AST_Array(UTL_ScopedName *n, unsigned long ndims, UTL_ExprList *dims);
+  virtual ~AST_Array() {}
+
+  // Data Accessors
+  const unsigned long n_dims();
+  AST_Expression **dims();
+  void            set_dims(AST_Expression **, unsigned long);
+  AST_Type       *base_type();
+  void            set_base_type(AST_Type *nbt);
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_Array, AST_ConcreteType);
+  DEF_NARROW_FROM_DECL(AST_Array);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+private:
+  // Data
+  unsigned long                        pd_n_dims;      // How many dimensions?
+  AST_Expression               **pd_dims;      // Their expressions
+  AST_Type                     *pd_base_type;  // Base type of array
+
+  // Operations
+
+  // Compute how many dimensions
+  AST_Expression              **compute_dims(UTL_ExprList *dims,
+                                            unsigned long ndims);
+};
+
+#endif           // _AST_ARRAY_AST_ARRAY_HH
diff --git a/src/xlat-idl/ast_attribute.cc b/src/xlat-idl/ast_attribute.cc
new file mode 100644 (file)
index 0000000..e16bc6a
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_attribute.cc        1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_attribute.cc - Implementation of class AST_Attribute.cc
+ *
+ * AST_Attribute nodes denote IDL attribute declarations.
+ * AST_Attribute nodes are AST_Fields with a readonly indication.
+ * Hence they have a name (an UTL_ScopedName), a type (a subtype
+ * of AST_Type) and a boolean indicating whether the attribute is
+ * readonly.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_Attribute::AST_Attribute()
+            : pd_readonly(I_TRUE)
+{
+}
+
+AST_Attribute::AST_Attribute(idl_bool ro,
+                            AST_Type *ft,
+                            UTL_ScopedName *n,
+                            UTL_StrList *p)
+            : AST_Field(AST_Decl::NT_attr, ft, n, p),
+              AST_Decl(AST_Decl::NT_attr, n, p),
+              pd_readonly(ro)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Dump this AST_Attribute to the ostream o
+ */
+void
+AST_Attribute::dump(ostream &o)
+{
+  o << (pd_readonly == I_TRUE ? "readonly" : "") << " attribute ";
+  AST_Field::dump(o);
+}
+
+/*
+ * Data accessors
+ */
+
+const idl_bool
+AST_Attribute::readonly()
+{
+  return pd_readonly;
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS1(AST_Attribute, AST_Field)
+IMPL_NARROW_FROM_DECL(AST_Attribute)
diff --git a/src/xlat-idl/ast_attribute.hh b/src/xlat-idl/ast_attribute.hh
new file mode 100644 (file)
index 0000000..af0c3fb
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_ATTRIBUTE_AST_ATTRIBUTE_HH
+#define _AST_ATTRIBUTE_AST_ATTRIBUTE_HH
+
+// #pragma ident "%@(#)AST_Attribute.h 1.37% %92/06/10% Sun Microsystems"
+
+// Representation of attribute declaration:
+//
+// An attribute is a field with a readonly property
+
+/*
+** DEPENDENCIES: ast_field.hh, ast_type.hh, utl_scoped_name.hh,
+**              utl_strlist.hh, ast_decl.hh
+**
+** USE: Included from ast.h
+*/
+
+class  AST_Attribute : public virtual AST_Field
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_Attribute();
+  AST_Attribute(idl_bool readonly,
+               AST_Type *ft,
+               UTL_ScopedName *n,
+               UTL_StrList *p);
+  virtual ~AST_Attribute() {}
+
+  // Data Accessors
+  const idl_bool readonly();
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_Attribute, AST_Field);
+  DEF_NARROW_FROM_DECL(AST_Attribute);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+private:
+  // Data
+  const idl_bool               pd_readonly;    // Is attribute read-only?
+};
+
+#endif           // _AST_ATTRIBUTE_AST_ATTRIBUTE_HH
diff --git a/src/xlat-idl/ast_check.cc b/src/xlat-idl/ast_check.cc
new file mode 100644 (file)
index 0000000..e0f99ea
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_check.cc    1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_check.cc - Check AST nodes representing fwd declared interfaces
+ *               after parse of AST is completed.
+ *
+ * The check ensures that for every forward declared interface we also
+ * saw a full definition of that interface.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Static storage for remembering nodes
+ */
+static AST_InterfaceFwd        **ast_fwds = NULL;
+static long            ast_n_fwds_used = 0;
+static long            ast_n_fwds_alloc = 0;
+
+#undef INCREMENT
+#define        INCREMENT       64
+
+/*
+ * Store a node representing a forward declared interface
+ */
+void
+AST_record_fwd_interface(AST_InterfaceFwd *n)
+{
+  AST_InterfaceFwd     **o_ast_fwds;
+  long                 o_ast_n_fwds_alloc;
+  long                 i;
+
+  /*
+   * Make sure there's space to store one more
+   */
+  if (ast_n_fwds_used == ast_n_fwds_alloc) {
+    if (ast_n_fwds_alloc == 0) {
+      ast_n_fwds_alloc = INCREMENT;
+      ast_fwds = new AST_InterfaceFwd *[ast_n_fwds_alloc];
+    } else {
+      o_ast_fwds = ast_fwds;
+      o_ast_n_fwds_alloc = ast_n_fwds_alloc;
+
+      ast_n_fwds_alloc += INCREMENT;
+      ast_fwds = new AST_InterfaceFwd *[ast_n_fwds_alloc];
+
+      for (i = 0; i < o_ast_n_fwds_alloc; i++)
+        ast_fwds[i] = o_ast_fwds[i];
+
+      delete o_ast_fwds;
+    }
+  }
+  /*
+   * Insert new node
+   */
+  ast_fwds[ast_n_fwds_used++] = n;
+}
+
+/*
+ * Check that all forward declared interfaces were also defined
+ */
+void
+AST_check_fwd_interface()
+{
+  long                 i;
+  AST_InterfaceFwd     *d;
+  AST_Interface                *itf;
+
+  for (i = 0; i < ast_n_fwds_used; i++) {
+    d = ast_fwds[i];
+    itf = d->full_definition();
+    if (!(itf->is_defined()))
+      idl_global->err()->fwd_decl_not_defined(itf);
+  }
+}
diff --git a/src/xlat-idl/ast_concrete_type.cc b/src/xlat-idl/ast_concrete_type.cc
new file mode 100644 (file)
index 0000000..87b400f
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_concrete_type.cc    1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_concrete_type.cc - Implementation of class AST_ConcreteType
+ *
+ * AST_ConcreteType nodes denote all non-interface types of IDL.
+ * They are AST_Type nodes.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_ConcreteType::AST_ConcreteType()
+{
+}
+
+AST_ConcreteType::AST_ConcreteType(AST_Decl::NodeType nt, UTL_ScopedName *n,
+                                    UTL_StrList *p)
+                : AST_Decl(nt, n, p)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS1(AST_ConcreteType, AST_Type)
+IMPL_NARROW_FROM_DECL(AST_ConcreteType)
diff --git a/src/xlat-idl/ast_concrete_type.hh b/src/xlat-idl/ast_concrete_type.hh
new file mode 100644 (file)
index 0000000..f7b89b8
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_CONCRETE_TYPE_AST_CONCRETE_TYPE_HH
+#define _AST_CONCRETE_TYPE_AST_CONCRETE_TYPE_HH
+
+// #pragma ident "%@(#)AST_ConcreteType.h      1.37% %92/06/10% Sun Microsystems"
+
+// Class for all concrete types
+//
+// This is useful to group together IDL types other than objects
+
+/*
+** DEPENDENCIES: ast_type.hh, ast_decl.hh, utl_scoped_name.hh, utl_strlist.hh
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_ConcreteType : public virtual AST_Type
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_ConcreteType();
+  AST_ConcreteType(AST_Decl::NodeType nt, UTL_ScopedName *n, UTL_StrList *p);
+  virtual ~AST_ConcreteType() {}
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_ConcreteType, AST_Type);
+  DEF_NARROW_FROM_DECL(AST_ConcreteType);
+};
+
+#endif           // _AST_CONCRETE_TYPE_AST_CONCRETE_TYPE_HH
diff --git a/src/xlat-idl/ast_constant.cc b/src/xlat-idl/ast_constant.cc
new file mode 100644 (file)
index 0000000..9da18d5
--- /dev/null
@@ -0,0 +1,205 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_constant.cc 1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_constant.cc - Implementation of class AST_Constant
+ *
+ * AST_Constant nodes denote IDL constant declarations.
+ * AST_Constants have a value (an AST_Expression) and a value type
+ * (a value from the enum AST_Expression::ExprType).
+ * AST_Constant has two constructors, one for use in creating constants
+ * and the other for use in creating enumerators (see the class
+ * AST_EnumVal)
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Static functions
+ */
+
+/*
+ * Convert a value from the enum AST_Expression::ExprType to a char *
+ */
+static char *
+exprtype_to_string(AST_Expression::ExprType et)
+{
+  switch (et) {
+  case AST_Expression::EV_short:
+    return "short";
+  case AST_Expression::EV_ushort:
+    return "unsigned short";
+  case AST_Expression::EV_long:
+    return "long";
+  case AST_Expression::EV_ulong:
+    return "unsigned long";
+  case AST_Expression::EV_float:
+    return "float";
+  case AST_Expression::EV_double:
+    return "double";
+  case AST_Expression::EV_char:
+    return "char";
+  case AST_Expression::EV_octet:
+    return "octet";
+  case AST_Expression::EV_bool:
+    return "boolean";
+  case AST_Expression::EV_string:
+    return "string";
+  case AST_Expression::EV_any:
+    return "any";
+  case AST_Expression::EV_void:
+    return "void";
+  case AST_Expression::EV_none:
+    return "none";
+  }
+}
+
+/*
+ * Constructor(s) and destructor
+ */
+
+/*
+ * Default constructor
+ */
+AST_Constant::AST_Constant()
+           : pd_constant_value(NULL), pd_et(AST_Expression::EV_none)
+{
+}
+
+/*
+ * Used in constructing AST_EnumVal nodes
+ */
+AST_Constant::AST_Constant(AST_Expression::ExprType t,
+                          AST_Decl::NodeType nt,
+                          AST_Expression *v,
+                          UTL_ScopedName *n,
+                          UTL_StrList *p)
+           : AST_Decl(nt, n, p),
+             pd_constant_value(idl_global->gen()->create_expr(v, t)),
+             pd_et(t)
+{
+}
+
+/*
+ * Used when constructing AST_Constant nodes
+ */
+AST_Constant::AST_Constant(AST_Expression::ExprType t,
+                          AST_Expression *v,
+                          UTL_ScopedName *n,
+                          UTL_StrList *p)
+           : AST_Decl(AST_Decl::NT_const, n, p),
+             pd_constant_value(idl_global->gen()->create_expr(v, t)),
+             pd_et(t)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Dump this AST_Constant node to the ostream o
+ */
+void
+AST_Constant::dump(ostream &o)
+{
+  o << "const " << exprtype_to_string(pd_et) << " ";
+  local_name()->dump(o);
+  o << " = ";
+  pd_constant_value->dump(o);
+}
+
+/*
+ * Data accessors
+ */
+
+AST_Expression *
+AST_Constant::constant_value()
+{
+  return pd_constant_value;
+}
+
+AST_Expression::ExprType
+AST_Constant::et()
+{
+  return pd_et;
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS1(AST_Constant, AST_Decl)
+IMPL_NARROW_FROM_DECL(AST_Constant)
diff --git a/src/xlat-idl/ast_constant.hh b/src/xlat-idl/ast_constant.hh
new file mode 100644 (file)
index 0000000..104fbdf
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_CONSTANT_AST_CONSTANT_HH
+#define _AST_CONSTANT_AST_CONSTANT_HH
+
+// #pragma ident "%@(#)AST_Constant.h  1.37% %92/06/10% Sun Microsystems"
+
+// Representation of constant declaration:
+//
+// NOTE: Part of the job of the constructor is to convert
+// the AST_Constant_val it received to the type denoted by
+// the ConstantType it received.
+//
+// NOTE: There are two constructors here, one that gets a NodeType
+// parameter. This constructor is used from AST_EnumVal, which is
+// just a glorified AST_Constant
+
+/*
+** DEPENDENCIES: ast_decl.hh, ast_expression.hh, utl_scoped_name.hh,
+**              utl_strlist.hh
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_Constant : public virtual AST_Decl
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_Constant();
+  AST_Constant(AST_Expression::ExprType et, AST_Decl::NodeType nt,
+              AST_Expression *ev, UTL_ScopedName *n, UTL_StrList *p);
+  AST_Constant(AST_Expression::ExprType et, AST_Expression *ev,
+              UTL_ScopedName *n, UTL_StrList *p);
+  virtual ~AST_Constant() {}
+
+  // Data Accessors
+  AST_Expression *constant_value();
+  AST_Expression::ExprType et();
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_Constant, AST_Decl);
+  DEF_NARROW_FROM_DECL(AST_Constant);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+private:
+  // Data
+  AST_Expression               *pd_constant_value;     // The value
+  AST_Expression::ExprType     pd_et;                  // Its expr type
+};
+
+#endif           // _AST_CONSTANT_AST_CONSTANT_HH
diff --git a/src/xlat-idl/ast_decl.cc b/src/xlat-idl/ast_decl.cc
new file mode 100644 (file)
index 0000000..b4f0e1b
--- /dev/null
@@ -0,0 +1,314 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_decl.cc     1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_decl.cc - Implementation of class AST_Decl
+ *
+ * AST_Decl is the base class for all AST nodes except AST_Expression.
+ * AST_Decls have a node type (a value from the enum AST_Decl::NodeType)
+ * a name (a UTL_ScopedName) and a list of pragmas (a UTL_StrList).
+ * Additionally AST_Decl nodes record the scope of definition, the
+ * file name in which they were defined, the line on which they were
+ * defined in that file, and a boolean denoting whether this is the
+ * main file or an #include'd file.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+
+AST_Decl::AST_Decl()
+       : pd_node_type(NT_module),
+         pd_line(-1),
+         pd_local_name(NULL),
+         pd_file_name(NULL),
+         pd_pragmas(NULL),
+         pd_defined_in(NULL),
+         pd_imported(I_FALSE),
+         pd_in_main_file(I_FALSE),
+         pd_name(NULL),
+         pd_added(I_FALSE)
+{
+}
+
+AST_Decl::AST_Decl(NodeType nt, UTL_ScopedName *n, UTL_StrList *p)
+       : pd_node_type(nt),
+         pd_line(idl_global->lineno()),
+         pd_local_name(n == NULL ? NULL : n->last_component()),
+         pd_file_name(idl_global->filename()),
+         pd_pragmas(p),
+         pd_defined_in(idl_global->scopes()->depth() > 0
+                      ? idl_global->scopes()->top()
+                      : NULL),
+         pd_imported(idl_global->imported()),
+         pd_in_main_file(idl_global->in_main_file()),
+         pd_added(I_FALSE)
+{
+  compute_full_name(n);
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Compute the full scoped name of an AST node
+ */
+void
+AST_Decl::compute_full_name(UTL_ScopedName *n)
+{
+  UTL_ScopedName       *cn = NULL;
+  AST_Decl             *d  = NULL;
+
+  /*
+   * Initialize this name to NULL
+   */
+  pd_name = NULL;
+  /*
+   * Global scope?
+   */
+  if (defined_in() == NULL) {
+    pd_name = n;
+    return;
+  }
+  /*
+   * OK, not global. So copy name of containing scope, then
+   * smash last cdr of copy with new component
+   */
+  d = ScopeAsDecl(defined_in());
+  if (d != NULL)
+    cn = d->name();
+  if (cn != NULL)
+    pd_name = (UTL_ScopedName *) cn->copy();
+  if (pd_name == NULL)
+    pd_name = new UTL_ScopedName(local_name(), NULL);
+  else
+    pd_name->nconc(new UTL_ScopedName(local_name(), NULL));
+}
+
+/*
+ * Public operations
+ */
+
+/*
+ * Return TRUE if one of my ancestor scopes is "s"
+ * and FALSE otherwise
+ */
+idl_bool
+AST_Decl::has_ancestor(AST_Decl *s)
+{
+  if (this == s)
+    return I_TRUE;
+  if (pd_defined_in == NULL)
+    return I_FALSE;
+  return ScopeAsDecl(pd_defined_in)->has_ancestor(s);
+}    
+
+/*
+ * Dump this AST_Decl to the ostream o
+ */
+void
+AST_Decl::dump(ostream &o)
+{
+  pd_local_name->dump(o);
+}
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Data accessors
+ */
+
+idl_bool
+AST_Decl::imported()
+{
+  return pd_imported;
+}
+
+void
+AST_Decl::set_imported(idl_bool is_it)
+{
+  pd_imported = is_it;
+}
+
+idl_bool
+AST_Decl::in_main_file()
+{
+  return pd_in_main_file;
+}
+
+void
+AST_Decl::set_in_main_file(idl_bool is_it)
+{
+  pd_in_main_file = is_it;
+}
+
+idl_bool
+AST_Decl::added()
+{
+  return pd_added;
+}
+
+void
+AST_Decl::set_added(idl_bool is_it)
+{
+  pd_added = is_it;
+}
+
+UTL_Scope *
+AST_Decl::defined_in()
+{
+  return pd_defined_in;
+}
+
+void
+AST_Decl::set_defined_in(UTL_Scope *s)
+{
+  pd_defined_in = s;
+}
+
+AST_Decl::NodeType 
+AST_Decl::node_type()
+{
+  return pd_node_type;
+}
+
+long
+AST_Decl::line()
+{
+  return pd_line;
+}
+
+void
+AST_Decl::set_line(long l)
+{
+  pd_line = l;
+}
+
+String *
+AST_Decl::file_name()
+{
+  return pd_file_name;
+}
+
+void
+AST_Decl::set_file_name(String *s)
+{
+  pd_file_name = s;
+}
+
+UTL_ScopedName *
+AST_Decl::name()
+{
+  return pd_name;
+}
+
+void
+AST_Decl::set_name(UTL_ScopedName *n)
+{
+  pd_name = n;
+  if (n != NULL)
+    pd_local_name = n->last_component();
+}
+
+Identifier *
+AST_Decl::local_name()
+{
+  return pd_local_name;
+}
+
+void
+AST_Decl::add_pragmas(UTL_StrList *p)
+{
+  if (p != NULL) {
+    if (pd_pragmas != NULL)
+      pd_pragmas->nconc(p);
+    else
+      pd_pragmas = p;
+  }
+}
+
+UTL_StrList *
+AST_Decl::pragmas()
+{
+  return pd_pragmas;
+}
+
+/*
+ * Narrowing methods for AST_Decl
+ */
+IMPL_NARROW_METHODS0(AST_Decl)
+IMPL_NARROW_FROM_DECL(AST_Decl)
+
+/*
+** Narrowing methods for COMMON_Base
+*/
+IMPL_NARROW_METHODS0(COMMON_Base)
diff --git a/src/xlat-idl/ast_decl.hh b/src/xlat-idl/ast_decl.hh
new file mode 100644 (file)
index 0000000..b311437
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_DECL_AST_DECL_HH
+#define _AST_DECL_AST_DECL_HH
+
+// #pragma ident "%@(#)AST_Decl.h      1.38% %92/06/10% Sun Microsystems"
+
+// Rock bottom of AST class hierarchy
+//
+// This class is inherited by all classes which represent named entities
+// in IDL. It implements the line and file recording mechanism and also
+// records the type of the node. This may be useful for BEs to be able
+// to distinguish the real type of a node given only a superclass.
+
+/*
+** DEPENDENCIES: utl_scope.hh, utl_scoped_name.hh, utl_strlist.hh
+**
+** USE: Included from ast.hh
+*/
+
+#include       <iostream.h>
+#include       "idl_fwd.hh"
+#include       "idl_narrow.hh"
+#include       "idl_bool.hh"
+#include       "utl_scoped_name.hh"
+#include       "utl_string.hh"
+
+// This class is needed (only for g++) to get around a bug in g++ which
+// causes virtual operations to not be looked up correctly if an operation
+// is defined in more than one virtual public base class. This class makes
+// the hierarchy rooted in a single class, thereby eliminating the situation
+// that causes the bug to appear
+
+class  COMMON_Base
+{
+  public:
+        // Narrowing
+    DEF_NARROW_METHODS0(COMMON_Base);
+};
+
+class  AST_Decl : public virtual COMMON_Base
+{
+public:
+  // Enum defining the different kinds of AST nodes
+  enum NodeType {
+        NT_module                              // Denotes a module
+      , NT_root                                        // Denotes the root of AST
+      , NT_interface                           // Denotes an interface
+      , NT_interface_fwd                       // Fwd declared interface
+      , NT_const                               // Denotes a constant
+      , NT_except                              // Denotes an exception
+      , NT_attr                                        // Denotes an attribute
+      , NT_op                                  // Denotes an operation
+      , NT_argument                            // Denotes an op. argument
+      , NT_union                               // Denotes a union
+      , NT_union_branch                                // Denotes a union branch
+      , NT_struct                              // Denotes a structure
+      , NT_field                               // Denotes a field in structure
+      , NT_enum                                        // Denotes an enumeration
+      , NT_enum_val                            // Denotes an enum. value
+      , NT_string                              // Denotes an IDL string
+      , NT_array                               // Denotes an IDL array
+      , NT_sequence                            // Denotes an IDL sequence
+      , NT_typedef                             // Denotes a typedef
+      , NT_pre_defined                         // Denotes a predefined type
+  };
+
+  // Operations
+
+  // Constructor(s)
+  AST_Decl();
+  AST_Decl(NodeType type, UTL_ScopedName *n, UTL_StrList *pragmas);
+  virtual ~AST_Decl() {}
+
+  // Data Accessors
+  idl_bool imported();
+  void set_imported(idl_bool is_it);
+  idl_bool in_main_file();
+  void set_in_main_file(idl_bool is_it);
+  UTL_Scope *defined_in();
+  void set_defined_in(UTL_Scope *);
+  NodeType node_type();
+  long line();
+  void set_line(long l);
+  String *file_name();
+  void set_file_name(String *s);
+  UTL_ScopedName *name();
+  void set_name(UTL_ScopedName *n);
+  Identifier *local_name();
+  void add_pragmas(UTL_StrList *p);
+  UTL_StrList *pragmas();
+  idl_bool added();
+  void set_added(idl_bool is_it);
+
+  // Narrowing
+  DEF_NARROW_METHODS0(AST_Decl);
+  DEF_NARROW_FROM_DECL(AST_Decl);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+  // Other operations
+
+  // Return TRUE if "this" has "s" as an ancestor
+  idl_bool                     has_ancestor(AST_Decl *s);
+
+private:
+  // Data
+  idl_bool                     pd_imported;    // Imported?
+  idl_bool                     pd_in_main_file; // Defined in main file?
+  UTL_Scope                    *pd_defined_in; // Scope
+  NodeType                     pd_node_type;   // What kind of node
+  long                         pd_line;        // Line defined in
+  String                       *pd_file_name;  // What file defined in
+  UTL_ScopedName               *pd_name;       // As given
+  Identifier                   *pd_local_name; // Name in scope
+  UTL_StrList                  *pd_pragmas;    // Pragmas
+  idl_bool                     pd_added;       // already added
+
+  // Operations
+
+  // Compute the full name of an AST node
+  void                         compute_full_name(UTL_ScopedName *n);
+};
+
+#endif           // _AST_DECL_AST_DECL_HH
diff --git a/src/xlat-idl/ast_enum.cc b/src/xlat-idl/ast_enum.cc
new file mode 100644 (file)
index 0000000..28754b8
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_enum.cc     1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_enum.cc - Implementation of class AST_Enum
+ *
+ * AST_Enum nodes denote IDL enum declarations.
+ * AST_Enums are a subclass of AST_ConcreteType and UTL_Scope.
+ * They have a counter denoting the next value to be assigned to
+ * an enumerator, and a name (a UTL_ScopedName).
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_Enum::AST_Enum()
+       : pd_enum_counter(0)
+{
+}
+
+AST_Enum::AST_Enum(UTL_ScopedName *n, UTL_StrList *p)
+       : AST_Decl(AST_Decl::NT_enum, n, p),
+        UTL_Scope(AST_Decl::NT_enum),
+        pd_enum_counter(0)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+/*
+ * Look up an enumerator by the value of the supplied expression
+ */
+AST_EnumVal *
+AST_Enum::lookup_by_value(const AST_Expression *v)
+{
+  UTL_ScopeActiveIterator *iter;
+  AST_EnumVal              *item;
+  AST_Decl               *i;
+
+  iter = new UTL_ScopeActiveIterator(this, IK_decls);
+
+  while (!iter->is_done()) {
+    i = iter->item();
+    item = AST_EnumVal::narrow_from_decl(i);
+    if (item->constant_value() == v) {
+      delete iter;
+      return item;
+    }
+    iter->next();
+  }
+  delete iter;
+  return NULL;
+}
+
+/*
+ * Compute the value to be assigned to the next enumerator. Bump the
+ * counter
+ */
+unsigned long
+AST_Enum::next_enum_val()
+{
+  unsigned long i = pd_enum_counter++;
+
+  return i;
+}
+
+/*
+ * Static helper functions
+ */
+
+/*
+ * Modify scoped name of an enumval so that it is scoped inside the scope
+ * in which the enum is defined and not inside the enum itself
+ */
+static UTL_ScopedName *
+munge_name_for_enumval(UTL_ScopedName *n, Identifier *last_component)
+{
+  long           l     = n->length();
+  UTL_ScopedName *hold = n;
+
+  /*
+   * last three components are:
+   * - scope in which enum is defined
+   * - scope for enum
+   * - name of enumval
+   *
+   * We want to stop cdr'ing down the list when the head of the
+   * list is at the name for the scope in which the enum is defined
+   */
+  while (l > 3) {
+    l--;
+    n = (UTL_ScopedName *) n->tail();
+  }
+
+  n->set_tail(new UTL_IdList(last_component, NULL));
+
+  return hold;
+}
+  
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Add an AST_EnumVal node to this scope
+ */
+AST_EnumVal *AST_Enum::fe_add_enum_val(AST_EnumVal *t)
+{
+  AST_Decl *d;
+  AST_EnumVal *t1 = NULL;
+
+  if (t != NULL) {
+    t1 = idl_global->gen()->create_enum_val
+      (t->constant_value()->coerce(AST_Expression::EV_ulong)->u.ulval, 
+       t->name(), t->pragmas());
+    t->set_name(munge_name_for_enumval(t->name(), t->local_name()));
+    t1->set_name(munge_name_for_enumval(t1->name(), t1->local_name()));
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+  /*
+   * Add it to enclosing scope
+   */
+  idl_global->scopes()->next_to_top()->fe_add_enum_val(t1);
+
+  return t;
+}
+
+/*
+ * Dump this AST_Enum to the ostream o
+ */
+void
+AST_Enum::dump(ostream &o)
+{
+  UTL_ScopeActiveIterator *i = new UTL_ScopeActiveIterator(this, IK_decls);
+  AST_Decl                 *d;
+
+  o << "enum ";
+  local_name()->dump(o);
+  o << " {\n";
+
+  while (!(i->is_done())) {
+    d = i->item();
+    d->local_name()->dump(o);
+    i->next();
+    if (!(i->is_done()))
+      o << ", ";
+  }
+  delete i;
+
+  idl_global->indent()->skip_to(o);
+  o << "}";
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS2(AST_Enum, AST_ConcreteType, UTL_Scope)
+IMPL_NARROW_FROM_DECL(AST_Enum)
+IMPL_NARROW_FROM_SCOPE(AST_Enum)
diff --git a/src/xlat-idl/ast_enum.hh b/src/xlat-idl/ast_enum.hh
new file mode 100644 (file)
index 0000000..6b9edeb
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_ENUM_AST_ENUM_HH
+#define _AST_ENUM_AST_ENUM_HH
+
+// #pragma ident "%@(#)AST_Enum.h      1.37% %92/06/10% Sun Microsystems"
+
+// Representation of enum:
+
+/*
+** DEPENDENCIES: ast_concrete_type.hh, utl_scope.hh, ast_enum_val.hh,
+**              utl_scoped_name.hh, utl_strlist.hh, ast_expression.hh,
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_Enum : public virtual AST_ConcreteType, public virtual UTL_Scope
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_Enum();
+  AST_Enum(UTL_ScopedName *n, UTL_StrList *p);
+  virtual ~AST_Enum() {}
+
+  // Narrowing
+  DEF_NARROW_METHODS2(AST_Enum, AST_ConcreteType, UTL_Scope);
+  DEF_NARROW_FROM_DECL(AST_Enum);
+  DEF_NARROW_FROM_SCOPE(AST_Enum);
+
+  // AST Dumping
+  virtual void                 dump(ostream &);
+
+  // Other operations
+
+  // Look up an AST_EnumVal by value
+  virtual AST_EnumVal          *lookup_by_value(const AST_Expression *v);
+
+  // Get value to be assigned to next enumerator
+  virtual unsigned long                next_enum_val();
+
+private:
+  // Data
+  unsigned long                        pd_enum_counter;        // Value for next
+                                                       // enumerator
+  // Scope management
+  friend int yyparse();
+  virtual AST_EnumVal          *fe_add_enum_val(AST_EnumVal    *v);
+
+};
+
+#endif           // _AST_ENUM_AST_ENUM_HH
diff --git a/src/xlat-idl/ast_enum_val.cc b/src/xlat-idl/ast_enum_val.cc
new file mode 100644 (file)
index 0000000..2b73978
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_enum_val.cc 1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_enum_val.cc - Implementation of class AST_EnumVal
+ *
+ * AST_EnumVals denote IDL enumerator declarations
+ * AST_EnumVals are a subclass of AST_Constant
+ * AST_EnumVals have no additional fields
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_EnumVal::AST_EnumVal()
+{
+}
+
+AST_EnumVal::AST_EnumVal(unsigned long v, UTL_ScopedName *n, UTL_StrList *p)
+           : AST_Constant(AST_Expression::EV_ulong,
+                          AST_Decl::NT_enum_val,
+                          new AST_Expression(v), n, p),
+             AST_Decl(AST_Decl::NT_enum_val, n, p)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Dump this AST_EnumVal to the ostream o
+ */
+void
+AST_EnumVal::dump(ostream &o)
+{
+  AST_Constant::dump(o);
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS1(AST_EnumVal, AST_Constant)
+IMPL_NARROW_FROM_DECL(AST_EnumVal)
diff --git a/src/xlat-idl/ast_enum_val.hh b/src/xlat-idl/ast_enum_val.hh
new file mode 100644 (file)
index 0000000..d8538f9
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_ENUM_VAL_AST_ENUM_VAL_HH
+#define _AST_ENUM_VAL_AST_ENUM_VAL_HH
+
+// #pragma ident "%@(#)AST_EnumVal.h   1.37% %92/06/10% Sun Microsystems"
+
+// Representation of enumerator in enum:
+//
+// An enumerator is a constant of type unsigned long
+
+/*
+** DEPENDENCIES: ast_constant.hh, utl_scoped_name.hh, utl_strlist.hh,
+**              ast_decl.hh
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_EnumVal : public virtual AST_Constant
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_EnumVal();
+  AST_EnumVal(unsigned long v, UTL_ScopedName *n, UTL_StrList *p);
+  virtual ~AST_EnumVal() {}
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_EnumVal, AST_Constant);
+  DEF_NARROW_FROM_DECL(AST_EnumVal);
+
+  // AST Dumping
+  virtual void                 dump(ostream &);
+};
+
+#endif           // _AST_ENUM_VAL_AST_ENUM_VAL_HH
diff --git a/src/xlat-idl/ast_exception.cc b/src/xlat-idl/ast_exception.cc
new file mode 100644 (file)
index 0000000..7f17c11
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_exception.cc        1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_exception.cc - Implementation of class AST_Exception
+ *
+ * AST_Exceptions denote IDL exception declarations
+ * AST_Exceptions are a subclass of AST_Decl (they are not types!)
+ * and of UTL_Scope
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_Exception::AST_Exception()
+{
+}
+
+AST_Exception::AST_Exception(UTL_ScopedName *n, UTL_StrList *p)
+            : AST_Structure(AST_Decl::NT_except, n, p)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Add this AST_Field node to the current scope
+ */
+AST_Field *AST_Exception::fe_add_field(AST_Field *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Union (manifest type declaration) to the current scope
+ */
+AST_Union *AST_Exception::fe_add_union(AST_Union *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to local types
+   */
+  add_to_local_types(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Structure (manifest type declaration) to the current
+ * scope
+ */
+AST_Structure *AST_Exception::fe_add_structure(AST_Structure *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error2(UTL_Error::EIDL_REDEF, t, this);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to local types
+   */
+  add_to_local_types(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Enum (manifest type declaration) to the current scope
+ */
+AST_Enum *AST_Exception::fe_add_enum(AST_Enum *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to local types
+   */
+  add_to_local_types(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_EnumVal (enumerator declaration) to the current scope.
+ * This is done to conform to the C++ scoping rules which declare
+ * enumerators in the enclosing scope (in addition to declaring them
+ * in the enum itself)
+ */
+AST_EnumVal *AST_Exception::fe_add_enum_val(AST_EnumVal *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Dump this AST_Exception node to the ostream o
+ */
+void
+AST_Exception::dump(ostream &o)
+{
+  o << "exception ";
+  local_name()->dump(o);
+  o << " {\n";
+  UTL_Scope::dump(o);
+  idl_global->indent()->skip_to(o);
+  o << "}";
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS1(AST_Exception, AST_Structure)
+IMPL_NARROW_FROM_DECL(AST_Exception)
+IMPL_NARROW_FROM_SCOPE(AST_Exception)
diff --git a/src/xlat-idl/ast_exception.hh b/src/xlat-idl/ast_exception.hh
new file mode 100644 (file)
index 0000000..e49c83c
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_EXCEPTION_AST_EXCEPTION_HH
+#define _AST_EXCEPTION_AST_EXCEPTION_HH
+
+// #pragma ident "%@(#)AST_Exception.h 1.37% %92/06/10% Sun Microsystems"
+
+// Representation of exception
+//
+// NOTE: An exception is not a type according to the CORBAS 1.1
+//
+// NOTE: add(AST_ConcreteType *) is defined here because an exception
+// can contain locally defined types in addition to fields.
+//
+// NOTE: add(AST_EnumValue *) is defined here because enums can
+// be defined manifest locally; the constants defined in these
+// enums are inserted in the enclosing scope. It is unlikely that
+// a BE writer will need to overload this function in AST_Exception.
+
+/*
+** DEPENDENCIES: ast_decl.hh, ast_structure.hh, utl_scope.hh, utl_strlist.hh
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_Exception : public virtual AST_Structure
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_Exception();
+  AST_Exception(UTL_ScopedName *n, UTL_StrList *p);
+  virtual ~AST_Exception() {}
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_Exception, AST_Structure);
+  DEF_NARROW_FROM_DECL(AST_Exception);
+  DEF_NARROW_FROM_SCOPE(AST_Exception);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+private:
+  friend int yyparse();
+  // Scope Management Protocol
+
+  virtual AST_Field            *fe_add_field(AST_Field         *f);
+  virtual AST_Union            *fe_add_union(AST_Union         *u);
+  virtual AST_Structure                *fe_add_structure(AST_Structure *s);
+  virtual AST_Enum             *fe_add_enum(AST_Enum           *e);
+  virtual AST_EnumVal          *fe_add_enum_val(AST_EnumVal    *v);
+
+};
+
+#endif           // _AST_EXCEPTION_AST_EXCEPTION_HH
diff --git a/src/xlat-idl/ast_expression.cc b/src/xlat-idl/ast_expression.cc
new file mode 100644 (file)
index 0000000..d796bec
--- /dev/null
@@ -0,0 +1,1524 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_expression.cc       1.47% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_expression.cc - Implementation of class AST_Expression
+ *
+ * AST_Expression nodes denote IDL expressions used in the IDL input.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+#include       <limits.h>
+#include       <float.h>
+
+#undef MAXCHAR
+#define MAXCHAR        128
+
+// Helper function to fill out the details of where this expression
+// is defined
+void
+AST_Expression::fill_definition_details()
+{
+  pd_defined_in = idl_global->scopes()->depth() > 0 
+    ? idl_global->scopes()->top()
+    : NULL;
+  pd_line       = idl_global->lineno();
+  pd_file_name = idl_global->filename();
+}
+
+/*
+ * Constructor(s) and destructor
+ */
+
+/*
+ * An AST_Expression denoting a symbolic name
+ */
+AST_Expression::AST_Expression(UTL_ScopedName *nm)
+             : pd_ec(EC_symbol),
+               pd_ev(NULL),
+               pd_n(nm),
+               pd_v1(NULL),
+               pd_v2(NULL)
+{
+  fill_definition_details();
+}
+
+/*
+ * An AST_Expression denoting a type coercion from another AST_Expression
+ */
+AST_Expression::AST_Expression(AST_Expression *v, ExprType t)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_n(NULL),
+               pd_ev(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = v->coerce(t);
+  if (pd_ev == NULL)
+    idl_global->err()->coercion_error(v, t);
+}
+
+/*
+ * An AST_Expression denoting a binary expression combination from
+ * two other AST_Expressions
+ */
+AST_Expression::AST_Expression(ExprComb c, AST_Expression *ev1,
+                              AST_Expression *ev2)
+             : pd_ec(c),
+               pd_v1(ev1),
+               pd_v2(ev2),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+}
+
+/*
+ * An AST_Expression denoting a short integer
+ */
+AST_Expression::AST_Expression(short sv)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_short;
+  pd_ev->u.sval = sv;
+}
+
+/*
+ * An AST_Expression denoting an unsigned short integer
+ */
+AST_Expression::AST_Expression(unsigned short usv)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_ushort;
+  pd_ev->u.usval = usv;
+}
+
+/*
+ * An AST_Expression denoting a long integer
+ */
+AST_Expression::AST_Expression(long lv)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_long;
+  pd_ev->u.lval = lv;
+}
+
+/*
+ * An AST_Expression denoting a long integer being used as a boolean
+ */
+AST_Expression::AST_Expression(long lv, ExprType t)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = t;
+  pd_ev->u.lval = lv;
+}
+
+/*
+ * An AST_Expression denoting an unsigned long integer
+ */
+AST_Expression::AST_Expression(unsigned long ulv)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_ulong;
+  pd_ev->u.ulval = ulv;
+}
+
+/* 
+ * An AST_Expression denoting a 32-bit floating point number
+ */
+AST_Expression::AST_Expression(float fv)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_float;
+  pd_ev->u.fval = fv;
+}
+
+/*
+ * An AST_Expression denoting a 64-bit floating point number
+ */
+AST_Expression::AST_Expression(double dv)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_double;
+  pd_ev->u.dval = dv;
+}
+
+/*
+ * An AST_Expression denoting a character
+ */
+AST_Expression::AST_Expression(char cv)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_char;
+  pd_ev->u.cval = cv;
+}
+
+/*
+ * An AST_Expression denoting an octet (unsigned char)
+ */
+AST_Expression::AST_Expression(unsigned char ov)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_octet;
+  pd_ev->u.oval = ov;
+}
+
+/*
+ * An AST_Expression denotign a string (char * encapsulated as a String)
+ */
+AST_Expression::AST_Expression(String *sv)
+             : pd_ec(EC_none),
+               pd_v1(NULL),
+               pd_v2(NULL),
+               pd_ev(NULL),
+               pd_n(NULL)
+{
+  fill_definition_details();
+
+  pd_ev = new AST_ExprValue;
+  pd_ev->et = EV_string;
+  pd_ev->u.strval = sv;
+}
+
+/*
+ * Static operations
+ */
+
+/*
+ * Perform the coercion from the given AST_ExprValue to the requested
+ * ExprType. Return an AST_ExprValue if successful, NULL if failed.
+ */
+static AST_Expression::AST_ExprValue *
+coerce_value(AST_Expression::AST_ExprValue *ev, AST_Expression::ExprType t)
+{
+  if (ev == NULL)
+    return NULL;
+
+  switch (t) {
+  case AST_Expression::EV_short:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      return ev;
+    case AST_Expression::EV_ushort:
+      if (ev->u.usval > (unsigned short) SHRT_MAX)
+       return NULL;
+      ev->u.sval = (short) ev->u.usval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_long:
+      if (ev->u.lval > (long) SHRT_MAX || ev->u.lval < (long) -(SHRT_MAX))
+       return NULL;
+      ev->u.sval = (short) ev->u.lval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_ulong:
+      if (ev->u.ulval > (unsigned long) SHRT_MAX)
+       return NULL;
+      ev->u.sval = (short) ev->u.ulval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_bool:
+      ev->u.sval = (short) ev->u.bval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_float:
+      if (ev->u.fval > (float) SHRT_MAX || ev->u.fval < (float) -(SHRT_MAX))
+       return NULL;
+      ev->u.sval = (short) ev->u.fval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_double:
+      if (ev->u.dval > (double) SHRT_MAX || ev->u.dval < (double) -(SHRT_MAX))
+       return NULL;
+      ev->u.sval = (short) ev->u.dval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_char:
+      ev->u.sval = (short) ev->u.cval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_octet:
+      ev->u.sval = (short) ev->u.oval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_ushort:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      if (ev->u.sval < 0)
+       return NULL;
+      ev->u.usval = (unsigned short) ev->u.sval;
+      ev->et = AST_Expression::EV_ushort;
+      return ev;
+    case AST_Expression::EV_ushort:
+      return ev;
+    case AST_Expression::EV_long:
+      if (ev->u.lval > (long) (SHRT_MAX << 1) || ev->u.lval < 0)
+       return NULL;
+      ev->u.usval = (unsigned short) ev->u.lval;
+      ev->et = AST_Expression::EV_ushort;
+      return ev;
+    case AST_Expression::EV_ulong:
+      if (ev->u.ulval > (unsigned long) (SHRT_MAX << 1))
+       return NULL;
+      ev->u.usval = (unsigned short) ev->u.ulval;
+      ev->et = AST_Expression::EV_ushort;
+      return ev;
+    case AST_Expression::EV_bool:
+      ev->u.usval = (unsigned short) ev->u.bval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_float:
+      if (ev->u.fval < 0.0 || ev->u.fval > (float) (SHRT_MAX << 1))
+       return NULL;
+      ev->u.usval = (unsigned short) ev->u.fval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_double:
+      if (ev->u.dval < 0.0 || ev->u.dval > (double) (SHRT_MAX << 1))
+       return NULL;
+      ev->u.usval = (unsigned short) ev->u.dval;
+      ev->et = AST_Expression::EV_short;
+      return ev;
+    case AST_Expression::EV_char:
+      if (ev->u.cval < 0)
+       return NULL;
+      ev->u.usval = (unsigned short) ev->u.cval;
+      ev->et = AST_Expression::EV_ushort;
+      return ev;
+    case AST_Expression::EV_octet:
+      ev->u.usval = (unsigned short) ev->u.oval;
+      ev->et = AST_Expression::EV_ushort;
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_long:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      ev->u.lval = (long) ev->u.sval;
+      ev->et = AST_Expression::EV_long;
+      return ev;
+    case AST_Expression::EV_ushort:
+      ev->u.lval = (long) ev->u.usval;
+      ev->et = AST_Expression::EV_long;
+      return ev;
+    case AST_Expression::EV_long:
+      return ev;
+    case AST_Expression::EV_ulong:
+      if (ev->u.ulval > (unsigned long) LONG_MAX)
+       return NULL;
+      ev->u.lval = (long) ev->u.ulval;
+      ev->et = AST_Expression::EV_long;
+      return ev;
+    case AST_Expression::EV_bool:
+      ev->u.lval = (long) ev->u.bval;
+      ev->et = AST_Expression::EV_long;
+      return ev;
+    case AST_Expression::EV_float:
+      if (ev->u.fval > (float) LONG_MAX || ev->u.fval < (float) -(LONG_MAX))
+       return NULL;
+      ev->u.lval = (long) ev->u.fval;
+      ev->et = AST_Expression::EV_long;
+      return ev;
+    case AST_Expression::EV_double:
+      if (ev->u.dval > (double) LONG_MAX || ev->u.dval < (double) -(LONG_MAX))
+       return NULL;
+      ev->u.lval = (long) ev->u.dval;
+      ev->et = AST_Expression::EV_long;
+      return ev;
+    case AST_Expression::EV_char:
+      ev->u.lval = (long) ev->u.cval;
+      ev->et = AST_Expression::EV_long;
+      return ev;
+    case AST_Expression::EV_octet:
+      ev->u.lval = (long) ev->u.oval;
+      ev->et = AST_Expression::EV_long;
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_ulong:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      if (ev->u.sval < 0)
+       return NULL;
+      ev->u.ulval = (unsigned long) ev->u.sval;
+      ev->et = AST_Expression::EV_ulong;
+      return ev;
+    case AST_Expression::EV_ushort:
+      ev->u.ulval = (unsigned long) ev->u.usval;
+      ev->et = AST_Expression::EV_ulong;
+      return ev;
+    case AST_Expression::EV_long:
+      if (ev->u.lval < 0)
+       return NULL;
+      ev->u.ulval = (unsigned long) ev->u.lval;
+      ev->et = AST_Expression::EV_ulong;
+      return ev;
+    case AST_Expression::EV_ulong:
+      return ev;
+    case AST_Expression::EV_bool:
+      ev->u.ulval = (unsigned long) ev->u.bval;
+      ev->et = AST_Expression::EV_ulong;
+      return ev;
+    case AST_Expression::EV_float:
+      if (ev->u.fval < 0.0 || ev->u.fval > (float) LONG_MAX)
+       return NULL;
+      ev->u.ulval = (unsigned long) ev->u.fval;
+      ev->et = AST_Expression::EV_ulong;
+      return ev;
+    case AST_Expression::EV_double:
+      if (ev->u.dval < 0.0 || ev->u.dval > (double) LONG_MAX)
+       return NULL;
+      ev->u.ulval = (unsigned long) ev->u.dval;
+      ev->et = AST_Expression::EV_ulong;
+      return ev;
+    case AST_Expression::EV_char:
+      if (ev->u.cval < 0)
+       return NULL;
+      ev->u.ulval = (unsigned long) ev->u.cval;
+      ev->et = AST_Expression::EV_ulong;
+      return ev;
+    case AST_Expression::EV_octet:
+      ev->u.ulval = (unsigned long) ev->u.oval;
+      ev->et = AST_Expression::EV_ulong;
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_bool:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      ev->u.bval = (ev->u.sval == 0) ? I_FALSE : I_TRUE;
+      ev->et = AST_Expression::EV_bool;
+      return ev;
+    case AST_Expression::EV_ushort:
+      ev->u.bval = (ev->u.usval == 0) ? I_FALSE : I_TRUE;
+      ev->et = AST_Expression::EV_bool;
+      return ev;
+    case AST_Expression::EV_long:
+      ev->u.bval = (ev->u.lval == 0) ? I_FALSE : I_TRUE;
+      ev->et = AST_Expression::EV_bool;
+      return ev;
+    case AST_Expression::EV_ulong:
+      ev->u.bval = (ev->u.ulval == 0) ? I_FALSE : I_TRUE;
+      ev->et = AST_Expression::EV_bool;
+      return ev;
+    case AST_Expression::EV_bool:
+      return ev;
+    case AST_Expression::EV_float:
+      ev->u.bval = (ev->u.fval == 0.0) ? I_FALSE : I_TRUE;
+      ev->et = AST_Expression::EV_bool;
+      return ev;
+    case AST_Expression::EV_double:
+      ev->u.bval = (ev->u.dval == 0.0) ? I_FALSE : I_TRUE;
+      ev->et = AST_Expression::EV_bool;
+      return ev;
+    case AST_Expression::EV_char:
+      ev->u.bval = (ev->u.cval == 0) ? I_FALSE : I_TRUE;
+      ev->et = AST_Expression::EV_bool;
+      return ev;
+    case AST_Expression::EV_octet:
+      ev->u.bval = (ev->u.oval == 0) ? I_FALSE : I_TRUE;
+      ev->et = AST_Expression::EV_bool;
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_float:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      ev->u.fval = (float) ev->u.sval;
+      ev->et = AST_Expression::EV_float;
+      return ev;
+    case AST_Expression::EV_ushort:
+      ev->u.fval = (float) ev->u.usval;
+      ev->et = AST_Expression::EV_float;
+      return ev;
+    case AST_Expression::EV_long:
+      ev->u.fval = (float) ev->u.lval;
+      ev->et = AST_Expression::EV_float;
+      return ev;
+    case AST_Expression::EV_ulong:
+      ev->u.fval = (float) ev->u.ulval;
+      ev->et = AST_Expression::EV_float;
+      return ev;
+    case AST_Expression::EV_bool:
+      ev->u.fval = (ev->u.bval == I_TRUE) ? 1.0 : 0.0;
+      ev->et = AST_Expression::EV_float;
+      return ev;
+    case AST_Expression::EV_float:
+      return ev;
+    case AST_Expression::EV_double:
+      if (ev->u.dval > FLT_MAX || ev->u.dval < -FLT_MAX)
+       return NULL;
+      ev->u.fval = (float) ev->u.dval;
+      ev->et = AST_Expression::EV_float;
+      return ev;
+    case AST_Expression::EV_char:
+      ev->u.fval = (float) ev->u.cval;
+      ev->et = AST_Expression::EV_float;
+      return ev;
+    case AST_Expression::EV_octet:
+      ev->u.fval = (float) ev->u.oval;
+      ev->et = AST_Expression::EV_float;
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_double:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      ev->u.dval = (double) ev->u.sval;
+      ev->et = AST_Expression::EV_double;
+      return ev;
+    case AST_Expression::EV_ushort:
+      ev->u.dval = (double) ev->u.usval;
+      ev->et = AST_Expression::EV_double;
+      return ev;
+    case AST_Expression::EV_long:
+      ev->u.dval = (double) ev->u.lval;
+      ev->et = AST_Expression::EV_double;
+      return ev;
+    case AST_Expression::EV_ulong:
+      ev->u.dval = (double) ev->u.ulval;
+      ev->et = AST_Expression::EV_double;
+      return ev;
+    case AST_Expression::EV_bool:
+      ev->u.dval = (ev->u.bval == I_TRUE) ? 1.0 : 0.0;
+      ev->et = AST_Expression::EV_double;
+      return ev;
+    case AST_Expression::EV_float:
+      ev->u.dval = (double) ev->u.fval;
+      ev->et = AST_Expression::EV_double;
+      return ev;
+    case AST_Expression::EV_double:
+      return ev;
+    case AST_Expression::EV_char:
+      ev->u.dval = (double) ev->u.cval;
+      ev->et = AST_Expression::EV_double;
+      return ev;
+    case AST_Expression::EV_octet:
+      ev->u.dval = (double) ev->u.oval;
+      ev->et = AST_Expression::EV_double;
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_char:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      if (ev->u.sval > (short) MAXCHAR || ev->u.sval < (short) -(MAXCHAR))
+       return NULL;
+      ev->u.cval = (char) ev->u.sval;
+      ev->et = AST_Expression::EV_char;
+      return ev;
+    case AST_Expression::EV_ushort:
+      if (ev->u.usval > (unsigned short) MAXCHAR)
+       return NULL;
+      ev->u.cval = (char) ev->u.usval;
+      ev->et = AST_Expression::EV_char;
+      return ev;
+    case AST_Expression::EV_long:
+      if (ev->u.lval > (long) MAXCHAR || ev->u.lval < (long) -(MAXCHAR))
+       return NULL;
+      ev->u.cval = (char) ev->u.lval;
+      ev->et = AST_Expression::EV_char;
+      return ev;
+    case AST_Expression::EV_ulong:
+      if (ev->u.ulval > (unsigned long) MAXCHAR)
+       return NULL;
+      ev->u.cval = (char) ev->u.ulval;
+      ev->et = AST_Expression::EV_char;
+      return ev;
+    case AST_Expression::EV_bool:
+      ev->u.cval = (char) ev->u.bval;
+      ev->et = AST_Expression::EV_char;
+      return ev;
+    case AST_Expression::EV_float:
+      if (ev->u.fval > (float) MAXCHAR || ev->u.fval < (float) -(MAXCHAR))
+       return NULL;
+      ev->u.cval = (char) ev->u.fval;
+      ev->et = AST_Expression::EV_char;
+      return ev;
+    case AST_Expression::EV_double:
+      if (ev->u.dval > (double) MAXCHAR || ev->u.dval < (double) -(MAXCHAR))
+       return NULL;
+      ev->u.cval = (char) ev->u.dval;
+      ev->et = AST_Expression::EV_char;
+      return ev;
+    case AST_Expression::EV_char:
+      return ev;
+    case AST_Expression::EV_octet:
+      if (ev->u.oval > (unsigned char) MAXCHAR)
+       return NULL;
+      ev->u.cval = (char) ev->u.oval;
+      ev->et = AST_Expression::EV_char;
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_octet:
+    switch (ev->et) {
+    case AST_Expression::EV_short:
+      if (ev->u.sval < 0 || ev->u.sval > (short) (MAXCHAR << 1))
+       return NULL;
+      ev->u.oval = (unsigned char) ev->u.sval;
+      ev->et = AST_Expression::EV_octet;
+      return ev;
+    case AST_Expression::EV_ushort:
+      if (ev->u.usval > (unsigned short) (MAXCHAR << 1))
+       return NULL;
+      ev->u.oval = (unsigned char) ev->u.usval;
+      ev->et = AST_Expression::EV_octet;
+      return ev;
+    case AST_Expression::EV_long:
+      if (ev->u.lval < 0 || ev->u.lval > (long) (MAXCHAR << 1))
+       return NULL;
+      ev->u.oval = (unsigned char) ev->u.lval;
+      ev->et = AST_Expression::EV_octet;
+      return ev;
+    case AST_Expression::EV_ulong:
+      if (ev->u.ulval > (unsigned long) (MAXCHAR << 1))
+       return NULL;
+      ev->u.oval = (unsigned char) ev->u.ulval;
+      ev->et = AST_Expression::EV_octet;
+      return ev;
+    case AST_Expression::EV_bool:
+      ev->u.oval = (ev->u.bval == I_FALSE) ? 1 : 0;
+      ev->et = AST_Expression::EV_octet;
+      return ev;
+    case AST_Expression::EV_float:
+      if (ev->u.fval < 0.0 || ev->u.fval > (float) (MAXCHAR << 1))
+       return NULL;
+      ev->u.oval = (unsigned char) ev->u.fval;
+      ev->et = AST_Expression::EV_octet;
+      return ev;
+    case AST_Expression::EV_double:
+      if (ev->u.dval < 0.0 || ev->u.dval > (double) (MAXCHAR << 1))
+       return NULL;
+      ev->u.oval = (unsigned char) ev->u.dval;
+      ev->et = AST_Expression::EV_octet;
+      return ev;
+    case AST_Expression::EV_char:
+      if (ev->u.cval < 0)
+       return NULL;
+      ev->u.oval = (unsigned char) ev->u.cval;
+      ev->et = AST_Expression::EV_octet;
+      return ev;
+    case AST_Expression::EV_octet:
+      return ev;
+    case AST_Expression::EV_string:
+    case AST_Expression::EV_any:
+    case AST_Expression::EV_void:
+    case AST_Expression::EV_none:
+      return NULL;
+    }
+  case AST_Expression::EV_any:
+    switch (ev->et) {
+    case AST_Expression::EV_any:
+      return ev;
+    default:
+      return NULL;
+    }
+  case AST_Expression::EV_void:
+    switch (ev->et) {
+    case AST_Expression::EV_void:
+      return ev;
+    default:
+      return NULL;
+    }
+  case AST_Expression::EV_none:
+    return NULL;
+  case AST_Expression::EV_string:
+    switch (ev->et) {
+    case AST_Expression::EV_string:
+      return ev;
+    default:
+      return NULL;
+    }
+  }
+}
+
+/*
+ * Evaluate the expression wrt the evaluation kind requested. Supported
+ * evaluation kinds are
+ * - EK_const:         The expression must evaluate to a constant
+ * - EK_positive_int:  The expression must further evaluate to a
+ *                     positive integer
+ */
+static AST_Expression::AST_ExprValue *
+eval_kind(AST_Expression::AST_ExprValue *ev, AST_Expression::EvalKind ek)
+{
+  if (ek == AST_Expression::EK_const)
+    return ev;
+  if (ek == AST_Expression::EK_positive_int)
+    return coerce_value(ev, AST_Expression::EV_ulong);
+
+  return NULL;
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Apply binary operators to an AST_Expression after evaluating
+ * its sub-expressions.
+ * Operations supported:
+ *
+ * '+', '-', '*', '/'
+ */
+AST_Expression::AST_ExprValue *
+AST_Expression::eval_bin_op(AST_Expression::EvalKind ek)
+{
+  AST_ExprValue        *retval = NULL;
+
+  if (ek != EK_const && ek != EK_positive_int)
+    return NULL;
+  if (pd_v1 == NULL || pd_v2 == NULL)
+    return NULL;
+  pd_v1->set_ev(pd_v1->eval_internal(ek));
+  if (pd_v1->ev() == NULL)
+    return NULL;
+  pd_v1->set_ev(pd_v1->coerce(EV_double));
+  if (pd_v1->ev() == NULL)
+    return NULL;
+  pd_v2->set_ev(pd_v2->eval_internal(ek));
+  if (pd_v2->ev() == NULL)
+    return NULL;
+  pd_v2->set_ev(pd_v2->coerce(EV_double));
+  if (pd_v2->ev() == NULL)
+    return NULL;
+
+  retval = new AST_ExprValue;
+  retval->et = EV_double;
+
+  switch (pd_ec) {
+  case EC_mod:
+    if (pd_v2->ev()->u.lval == 0)
+      return NULL;
+    retval->u.lval = pd_v1->ev()->u.lval % pd_v2->ev()->u.lval;
+    break;
+  case EC_add:
+    retval->u.dval = pd_v1->ev()->u.dval + pd_v2->ev()->u.dval;
+    break;
+  case EC_minus:
+    retval->u.dval = pd_v1->ev()->u.dval - pd_v2->ev()->u.dval;
+    break;
+  case EC_mul:
+    retval->u.dval = pd_v1->ev()->u.dval * pd_v2->ev()->u.dval;
+    break;
+  case EC_div:
+    if (pd_v2->ev()->u.dval == 0.0)
+      return NULL;
+    retval->u.dval = pd_v1->ev()->u.dval / pd_v2->ev()->u.dval;
+    break;
+  default:
+    return NULL;
+  }
+  return retval;
+}
+
+/*
+ * Apply bitwise operations to an AST_Expression after evaluating
+ * its sub-expressions.
+ * Operations supported:
+ *
+ * '%', '|', '&', '^', '<<', '>>'
+ */
+AST_Expression::AST_ExprValue *
+AST_Expression::eval_bit_op(AST_Expression::EvalKind ek)
+{
+  AST_Expression::AST_ExprValue        *retval=NULL;
+
+  if (ek != EK_const && ek != EK_positive_int)
+    return NULL;
+  if (pd_v1 == NULL || pd_v2 == NULL)
+    return NULL;
+  pd_v1->set_ev(pd_v1->eval_internal(ek));
+  if (pd_v1->ev() == NULL)
+    return NULL;
+  pd_v1->set_ev(pd_v1->coerce(EV_long));
+  if (pd_v1->ev() == NULL)
+    return NULL;
+  pd_v2->set_ev(pd_v2->eval_internal(ek));
+  if (pd_v2->ev() == NULL)
+    return NULL;
+  pd_v2->set_ev(pd_v2->coerce(EV_long));
+  if (pd_v2->ev() == NULL)
+    return NULL;
+
+  retval = new AST_ExprValue;
+  retval->et = EV_long;
+
+  switch (pd_ec) {
+  case EC_or:
+    retval->u.lval = pd_v1->ev()->u.lval | pd_v2->ev()->u.lval;
+    break;
+  case EC_xor:
+    retval->u.lval = pd_v1->ev()->u.lval ^ pd_v2->ev()->u.lval;
+    break;
+  case EC_and:
+    retval->u.lval = pd_v1->ev()->u.lval & pd_v2->ev()->u.lval;
+    break;
+  case EC_left:
+    retval->u.lval = pd_v1->ev()->u.lval << pd_v2->ev()->u.lval;
+    break;
+  case EC_right:
+    retval->u.lval = pd_v1->ev()->u.lval >> pd_v2->ev()->u.lval;
+    break;
+  default:
+    return NULL;
+  }
+  return retval;
+}
+
+/*
+ * Apply unary operators to an AST_Expression after evaluating its
+ * sub-expression.
+ * Operations supported:
+ *
+ * '-', '+', '~'
+ */
+AST_Expression::AST_ExprValue *
+AST_Expression::eval_un_op(AST_Expression::EvalKind ek)
+{
+  AST_ExprValue        *retval = NULL;
+
+  if (pd_ev != NULL)
+    return pd_ev;
+
+  if (ek != EK_const && ek != EK_positive_int)
+    return NULL;
+  if (pd_v1 == NULL)
+    return NULL;
+  pd_v1->set_ev(pd_v1->eval_internal(ek));
+  if (pd_v1->ev() == NULL)
+    return NULL;
+  pd_v1->set_ev(pd_v1->coerce(EV_double));
+  if (pd_v1->ev() == NULL)
+    return NULL;
+
+  retval = new AST_ExprValue;
+  retval->et = EV_double;
+
+  switch (pd_ec) {
+  case EC_u_plus:
+    retval->u.lval = pd_v1->ev()->u.lval;
+    break;
+  case EC_u_minus:
+    retval->u.lval = -(pd_v1->ev()->u.lval);
+    break;
+  case EC_bit_neg:
+    pd_v1->set_ev(pd_v1->coerce(EV_long));
+    if (pd_v1->ev() == NULL)
+      return NULL;
+    retval->u.lval = ~pd_v1->ev()->u.lval;
+    break;
+  default:
+    return NULL;
+  }
+  return retval;
+}
+
+/*
+ * Evaluate a symbolic AST_Expression by looking up the named
+ * symbol.
+ */
+AST_Expression::AST_ExprValue *
+AST_Expression::eval_symbol(AST_Expression::EvalKind ek)
+{
+  UTL_Scope            *s;
+  AST_Decl             *d;
+  AST_Constant         *c;
+
+  /*
+   * Is there a symbol stored?
+   */
+  if (pd_n == NULL) {
+    idl_global->err()->eval_error(this);
+    return NULL;
+  }
+  /*
+   * Get current scope for lookup
+   */
+  if (idl_global->scopes()->depth() > 0)
+     s = idl_global->scopes()->top_non_null();
+  if (s == NULL) {
+    idl_global->err()->lookup_error(pd_n);
+    return NULL;
+  }
+  /*
+   * Do lookup
+   */
+  d = s->lookup_by_name(pd_n, I_TRUE);
+  if (d == NULL) {
+    idl_global->err()->lookup_error(pd_n);
+    return NULL;
+  }
+  /*
+   * Is it a constant?
+   */
+  if (d->node_type() != AST_Decl::NT_const &&
+      d->node_type() != AST_Decl::NT_enum_val) {
+    idl_global->err()->constant_expected(pd_n, d);
+    return NULL;
+  }
+  /*
+   * OK, now evaluate the constant we just got, to produce its value
+   */
+  c = AST_Constant::narrow_from_decl(d);
+  if (c == NULL) return NULL;
+  return c->constant_value()->eval_internal(ek);
+}
+
+/*
+ * Coerce "this" to the ExprType required. Returns a copy of the
+ * original ExprValue with the coercion applied, if successful, or
+ * NULL if failed.
+ */
+AST_Expression::AST_ExprValue *
+AST_Expression::coerce(AST_Expression::ExprType t)
+{
+  AST_ExprValue *copy;
+
+  /*
+   * Is it already of the right type?
+   */
+  if (pd_ev != NULL && pd_ev->et == t)
+    return pd_ev;
+  /*
+   * OK, must coerce
+   *
+   * First, evaluate it, then try to coerce result type
+   * If already evaluated, return the result
+   */
+  pd_ev = eval_internal(EK_const);
+  if (pd_ev == NULL)
+    return NULL;
+
+  /*
+   * Create a copy to contain coercion result
+   */
+  copy = new AST_ExprValue;
+
+  copy->et = pd_ev->et;
+  switch (pd_ev->et) {
+  case EV_void:
+  case EV_none:
+  case EV_any:
+    return NULL;
+  case EV_short:
+    copy->u.sval = pd_ev->u.sval;
+    break;
+  case EV_ushort:
+    copy->u.usval = pd_ev->u.usval;
+    break;
+  case EV_long:
+    copy->u.lval = pd_ev->u.lval;
+    break;
+  case EV_ulong:
+    copy->u.ulval = pd_ev->u.ulval;
+    break;
+  case EV_bool:
+    copy->u.bval = pd_ev->u.bval;
+    break;
+  case EV_float:
+    copy->u.fval = pd_ev->u.fval;
+    break;
+  case EV_double:
+    copy->u.dval = pd_ev->u.dval;
+    break;
+  case EV_char:
+    copy->u.cval = pd_ev->u.cval;
+    break;
+  case EV_octet:
+    copy->u.oval = pd_ev->u.oval;
+    break;
+  case EV_string:
+    copy->u.strval = pd_ev->u.strval;
+    break;
+  }
+
+  return coerce_value(copy, t);
+}
+
+/*
+ * Eval used internally
+ */
+AST_Expression::AST_ExprValue *
+AST_Expression::eval_internal(AST_Expression::EvalKind ek)
+{
+  /*
+   * Already evaluated?
+   */
+  if (pd_ev != NULL)
+    return eval_kind(pd_ev, ek);
+  /*
+   * OK, must evaluate operator
+   */
+  switch (pd_ec) {
+  case EC_add:
+  case EC_minus:
+  case EC_mul:
+  case EC_div:
+  case EC_mod:
+    pd_ev = eval_bin_op(ek);
+    return eval_kind(pd_ev, ek);
+  case EC_or:
+  case EC_xor:
+  case EC_and:
+  case EC_left:
+  case EC_right:
+    pd_ev = eval_bit_op(ek);
+    return eval_kind(pd_ev, ek);
+  case EC_u_plus:
+  case EC_u_minus:
+  case EC_bit_neg:
+    pd_ev = eval_un_op(ek);
+    return eval_kind(pd_ev, ek);
+  case EC_symbol:
+    pd_ev = eval_symbol(ek);
+    return eval_kind(pd_ev, ek);
+  case EC_none:
+    return NULL;
+  }
+}
+
+/*
+ * Public operations
+ */
+
+/*
+ * Evaluate an AST_Expression, producing an AST_ExprValue or NULL
+ */
+AST_Expression::AST_ExprValue *
+AST_Expression::eval(AST_Expression::EvalKind ek)
+{
+  AST_Expression::AST_ExprValue *v = NULL;
+
+  /*
+   * Call internal evaluator which does not coerce value to
+   * EvalKind-expected format
+   */
+  v = eval_internal(ek);
+  /*
+   * Then coerce according to EvalKind-expected format
+   */
+  return eval_kind(v, ek);
+}
+
+/*
+ * Evaluate "this", assigning the value to the pd_ev field.
+ */
+void
+AST_Expression::evaluate(EvalKind ek)
+{
+  pd_ev = eval_internal(ek);
+  pd_ev = eval_kind(pd_ev, ek);
+}
+
+/*
+ * Expression equality comparison operator
+ */
+long
+AST_Expression::operator==(AST_Expression *vc)
+{
+  if (pd_ec != vc->ec())
+    return I_FALSE;
+  evaluate(EK_const);
+  vc->evaluate(EK_const);
+  if (pd_ev == NULL || vc->ev() == NULL)
+    return I_FALSE;
+  if (pd_ev->et != vc->ev()->et)
+    return I_FALSE;
+  switch (pd_ev->et) {
+  case EV_short:
+    return (pd_ev->u.sval == vc->ev()->u.sval) ? I_TRUE : I_FALSE;
+ case EV_ushort:
+    return (pd_ev->u.usval == vc->ev()->u.usval) ? I_TRUE : I_FALSE;
+  case EV_long:
+    return (pd_ev->u.lval == vc->ev()->u.lval) ? I_TRUE : I_FALSE;
+  case EV_ulong:
+    return (pd_ev->u.ulval == vc->ev()->u.ulval) ? I_TRUE : I_FALSE;
+  case EV_float:
+    return (pd_ev->u.fval == vc->ev()->u.fval) ? I_TRUE : I_FALSE;
+  case EV_double:
+    return (pd_ev->u.dval == vc->ev()->u.dval) ? I_TRUE : I_FALSE;
+  case EV_char:
+    return (pd_ev->u.cval == vc->ev()->u.cval) ? I_TRUE : I_FALSE;
+  case EV_octet:
+    return (pd_ev->u.oval == vc->ev()->u.oval) ? I_TRUE : I_FALSE;
+  case EV_bool:
+    return (pd_ev->u.lval == vc->ev()->u.lval) ? I_TRUE : I_FALSE;
+  case EV_string:
+    if (pd_ev->u.strval == NULL) {
+      if (vc->ev()->u.strval == NULL)
+       return I_TRUE;
+      else
+       return I_FALSE;
+    } else if (vc->ev()->u.strval == NULL)
+      return I_FALSE;
+    else
+      return (pd_ev->u.strval == vc->ev()->u.strval) ? I_TRUE : I_FALSE;
+  case EV_any:
+  case EV_void:
+  case EV_none:
+    return I_FALSE;
+  }
+}
+
+long
+AST_Expression::compare(AST_Expression *vc)
+{
+  if (pd_ec != vc->ec())
+    return I_FALSE;
+  evaluate(EK_const);
+  vc->evaluate(EK_const);
+  if (pd_ev == NULL || vc->ev() == NULL)
+    return I_FALSE;
+  if (pd_ev->et != vc->ev()->et)
+    return I_FALSE;
+  switch (pd_ev->et) {
+  case EV_short:
+    return (pd_ev->u.sval == vc->ev()->u.sval) ? I_TRUE : I_FALSE;
+ case EV_ushort:
+    return (pd_ev->u.usval == vc->ev()->u.usval) ? I_TRUE : I_FALSE;
+  case EV_long:
+    return (pd_ev->u.lval == vc->ev()->u.lval) ? I_TRUE : I_FALSE;
+  case EV_ulong:
+    return (pd_ev->u.ulval == vc->ev()->u.ulval) ? I_TRUE : I_FALSE;
+  case EV_float:
+    return (pd_ev->u.fval == vc->ev()->u.fval) ? I_TRUE : I_FALSE;
+  case EV_double:
+    return (pd_ev->u.dval == vc->ev()->u.dval) ? I_TRUE : I_FALSE;
+  case EV_char:
+    return (pd_ev->u.cval == vc->ev()->u.cval) ? I_TRUE : I_FALSE;
+  case EV_octet:
+    return (pd_ev->u.oval == vc->ev()->u.oval) ? I_TRUE : I_FALSE;
+  case EV_bool:
+    return (pd_ev->u.lval == vc->ev()->u.lval) ? I_TRUE : I_FALSE;
+  case EV_string:
+    if (pd_ev->u.strval == NULL) {
+      if (vc->ev()->u.strval == NULL)
+       return I_TRUE;
+      else
+       return I_FALSE;
+    } else if (vc->ev()->u.strval == NULL)
+      return I_FALSE;
+    else
+      return (pd_ev->u.strval == vc->ev()->u.strval) ? I_TRUE : I_FALSE;
+  case EV_any:
+  case EV_void:
+  case EV_none:
+    return I_FALSE;
+  }
+}
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Helper functions for expression dumpers
+ */
+
+/*
+ * Dump this binary AST_Expression node to the ostream o
+ */
+static void
+dump_binary_expr(ostream &o, char *s, AST_Expression *n1, AST_Expression *n2)
+{
+  if (n1 != NULL) n1->dump(o);
+  o << " " << s << " ";
+  if (n2 != NULL) n2->dump(o);
+}
+
+/*
+ * Dump this unary AST_Expression node to the ostream o
+ */
+static void
+dump_unary_expr(ostream &o, char *s, AST_Expression *e)
+{
+  o << s;
+  e->dump(o);
+}
+
+/*
+ * Dump the supplied AST_ExprValue to the ostream o
+ */
+static void
+dump_expr_val(ostream &o, AST_Expression::AST_ExprValue *ev)
+{
+  switch (ev->et) {
+  case AST_Expression::EV_short:
+    o << ev->u.sval;
+    break;
+  case AST_Expression::EV_ushort:
+    o << ev->u.usval;
+    break;
+  case AST_Expression::EV_long:
+    o << ev->u.lval;
+    break;
+  case AST_Expression::EV_ulong:
+    o << ev->u.ulval;
+    break;
+  case AST_Expression::EV_float:
+    o << ev->u.fval;
+    break;
+  case AST_Expression::EV_double:
+    o << ev->u.dval;
+    break;
+  case AST_Expression::EV_char:
+    o << ev->u.cval;
+    break;
+  case AST_Expression::EV_octet:
+    o << ev->u.oval;
+    break;
+  case AST_Expression::EV_bool:
+    o << (ev->u.bval == I_TRUE) ? "TRUE" : "FALSE";
+    break;
+  case AST_Expression::EV_string:
+    if (ev->u.strval != NULL)
+      ev->u.strval->dump(o);
+  case AST_Expression::EV_any:
+  case AST_Expression::EV_none:
+  case AST_Expression::EV_void:
+    break;
+  }
+}
+
+/*
+ * Dump an AST_Expression node to the ostream o
+ */
+void
+AST_Expression::dump(ostream &o)
+{
+  /*
+   * See if it was a constant or was evaluated already
+   */
+  if (pd_ev != NULL) {
+    dump_expr_val(o, pd_ev);
+    return;
+  }
+  /*
+   * OK, must print out an expression
+   */
+  switch (pd_ec) {
+    /*
+     * Binary expressions:
+     */
+  case EC_add:
+    dump_binary_expr(o, "+", pd_v1, pd_v2);
+    break;
+  case EC_minus:
+    dump_binary_expr(o, "-", pd_v1, pd_v2);
+    break;
+  case EC_mul:
+    dump_binary_expr(o, "*", pd_v1, pd_v2);
+    break;
+  case EC_div:
+    dump_binary_expr(o, "/", pd_v1, pd_v2);
+    break;
+  case EC_mod:
+    dump_binary_expr(o, "%", pd_v1, pd_v2);
+    break;
+  case EC_or:
+    dump_binary_expr(o, "|", pd_v1, pd_v2);
+    break;
+  case EC_xor:
+    dump_binary_expr(o, "^", pd_v1, pd_v2);
+    break;
+  case EC_and:
+    dump_binary_expr(o, "&", pd_v1, pd_v2);
+    break;
+  case EC_left:
+    dump_binary_expr(o, "<<", pd_v1, pd_v2);
+    break;
+  case EC_right:
+    dump_binary_expr(o, ">>", pd_v1, pd_v2);
+    break;
+    /*
+     * Unary expressions:
+     */
+  case EC_u_plus:
+    dump_unary_expr(o, "+", pd_v1);
+    break;
+  case EC_u_minus:
+    dump_unary_expr(o, "-", pd_v1);
+    break;
+  case EC_bit_neg:
+    dump_unary_expr(o, "~", pd_v1);
+    break;
+    /*
+     * Unevaluated symbol
+     */
+  case EC_symbol:
+    pd_n->dump(o);
+    break;
+  case EC_none:
+    break;
+  default:
+    o << GTDEVEL("unsupported dump mode for expression with ec == ") << pd_ec ;
+    break;
+  }
+}
+
+/*
+ * Data accessors
+ */
+
+UTL_Scope *
+AST_Expression::defined_in()
+{
+  return pd_defined_in;
+}
+
+void
+AST_Expression::set_defined_in(UTL_Scope *d)
+{
+  pd_defined_in = d;
+}
+
+long
+AST_Expression::line()
+{
+  return pd_line;
+}
+
+void
+AST_Expression::set_line(long l)
+{
+  pd_line = l;
+}
+
+String *
+AST_Expression::file_name()
+{
+  return pd_file_name;
+}
+
+void
+AST_Expression::set_file_name(String *f)
+{
+  pd_file_name = f;
+}
+
+AST_Expression::ExprComb
+AST_Expression::ec()
+{
+  return pd_ec;
+}
+
+void
+AST_Expression::set_ec(AST_Expression::ExprComb new_ec)
+{
+  pd_ec = new_ec;
+}
+
+AST_Expression::AST_ExprValue  *
+AST_Expression::ev()
+{
+  return pd_ev;
+}
+
+void
+AST_Expression::set_ev(AST_Expression::AST_ExprValue *new_ev)
+{
+  pd_ev = new_ev;
+}
+
+AST_Expression *
+AST_Expression::v1()
+{
+  return pd_v1;
+}
+
+void
+AST_Expression::set_v1(AST_Expression *e)
+{
+
+  pd_v1 = e;
+}
+
+AST_Expression *
+AST_Expression::v2()
+{
+  return pd_v2;
+}
+
+void
+AST_Expression::set_v2(AST_Expression *e)
+{
+  pd_v2 = e;
+}
+
+UTL_ScopedName *
+AST_Expression::n()
+{
+  return pd_n;
+}
+
+void
+AST_Expression::set_n(UTL_ScopedName *new_n)
+{
+  pd_n = new_n;
+}
diff --git a/src/xlat-idl/ast_expression.hh b/src/xlat-idl/ast_expression.hh
new file mode 100644 (file)
index 0000000..24d8376
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_EXPRESSION_AST_EXPRESSION_HH
+#define _AST_EXPRESSION_AST_EXPRESSION_HH
+
+// #pragma ident "%@(#)AST_Expression.h        1.39% %92/06/10% Sun Microsystems"
+
+// Representation of expression values
+
+/*
+** DEPENDENCIES: NONE
+**
+** USE: Included from ast.hh
+*/
+
+// An expression (and maybe its value, if computed)
+class  AST_Expression {
+public:
+  // Enum to define all the different operators to combine expressions
+  enum ExprComb {
+      EC_add           // '+'
+    , EC_minus         // '-'
+    , EC_mul           // '*'
+    , EC_div           // '/'
+    , EC_mod           // '%'
+    , EC_or            // '|'
+    , EC_xor           // '^'
+    , EC_and           // '&'
+    , EC_left          // '<<'
+    , EC_right         // '>>'
+    , EC_u_plus                // unary '+'
+    , EC_u_minus       // unary '-'
+    , EC_bit_neg       // '~'
+    , EC_none          // No operator (missing)
+    , EC_symbol                // a symbol (function or constant name)
+  };
+  
+  // Enum to define the different kinds of evaluation possible
+  // Extend this for more kinds of evaluation as required
+  enum EvalKind {
+      EK_const                 // Must evaluate to constant
+    , EK_positive_int          // Must evaluate to positive integer
+  };
+
+  // Enum to define expression type
+  enum ExprType {
+      EV_short                 // Expression value is short
+    , EV_ushort                        // Expression value is unsigned short
+    , EV_long                  // Expression value is long
+    , EV_ulong                 // Expression value is unsigned long
+    , EV_longlong              // Expression value is long long
+    , EV_ulonglong             // Expression value is unsigned long long
+    , EV_float                 // Expression value is 32-bit float
+    , EV_double                        // Expression value is 64-bit float
+    , EV_longdouble            // Expression value is 128-bit float
+    , EV_char                  // Expression value is char
+    , EV_wchar                 // Expression value is wide char        
+    , EV_octet                 // Expression value is unsigned char
+    , EV_bool                  // Expression value is boolean
+    , EV_string                        // Expression value is char *
+    , EV_wstring               // Expression value is wchar_t *
+    , EV_any                   // Expression value is any of above
+    , EV_void                  // Expression value is void (absent)
+    , EV_none                  // Expression value is missing
+  };
+
+  // Structure to descrive value of constant expression and its type
+  struct AST_ExprValue {
+    union {
+      short            sval;   // Contains short expression value
+      unsigned short   usval;  // Contains unsigned short expr value
+      long             lval;   // Contains long expression value
+      unsigned long    ulval;  // Contains unsigned long expr value
+      unsigned long    bval;   // Contains boolean expression value
+      float            fval;   // Contains 32-bit float expr value
+      double           dval;   // Contains 64-bit float expr value
+      char             cval;   // Contains char expression value
+      unsigned char    oval;   // Contains unsigned char expr value
+      String           *strval; // Contains String * expr value
+      unsigned long    eval;   // Contains enumeration value
+    } u;
+    ExprType et;
+  };
+
+  // Operations
+
+  // Constructor(s)
+  AST_Expression(AST_Expression *v, ExprType t);
+
+  AST_Expression(ExprComb c, AST_Expression *v1, AST_Expression *v2);
+
+  AST_Expression(short         s);
+  AST_Expression(unsigned short        us);
+  AST_Expression(long          l);
+  AST_Expression(long          l, ExprType t);
+  AST_Expression(unsigned long ul);
+  AST_Expression(float         f);
+  AST_Expression(double                d);
+  AST_Expression(char          c);
+  AST_Expression(unsigned char uc);
+  AST_Expression(String                *s);
+  AST_Expression(UTL_ScopedName        *n);
+  virtual ~AST_Expression () {}
+
+  // Data Accessors
+  UTL_Scope *defined_in();
+  void set_defined_in(UTL_Scope *d);
+  long line();
+  void set_line(long l);
+  String *file_name();
+  void set_file_name(String *f);
+  ExprComb ec();
+  void set_ec(ExprComb new_ec);
+  AST_ExprValue        *ev();
+  void set_ev(AST_ExprValue *new_ev);
+  AST_Expression *v1();
+  void set_v1(AST_Expression *e);
+  AST_Expression *v2();
+  void set_v2(AST_Expression *e);
+  UTL_ScopedName *n();
+  void set_n(UTL_ScopedName *new_n);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+  // Other operations
+
+  // Evaluation and value coercion
+  virtual AST_ExprValue                *eval(EvalKind ek);
+  virtual AST_ExprValue                *coerce(ExprType t);
+
+  // Evaluate then store value inside this AST_Expression
+  virtual void                 evaluate(EvalKind ek);
+
+  // Compare to AST_Expressions
+  virtual long                 operator==(AST_Expression *vc);
+  virtual long                 compare(AST_Expression *vc);
+
+protected:
+  // Evaluate different sets of operators
+  virtual AST_ExprValue        *eval_bin_op(EvalKind ek);
+  virtual AST_ExprValue        *eval_bit_op(EvalKind ek);
+  virtual AST_ExprValue        *eval_un_op(EvalKind ek);
+  virtual AST_ExprValue        *eval_symbol(EvalKind ek);
+
+private:
+  // Data
+  UTL_Scope                    *pd_defined_in; // Scope
+  long                         pd_line;        // Line defined in
+  String                       *pd_file_name;  // What file defined in
+
+  ExprComb                     pd_ec;          // What combinator
+  AST_ExprValue                        *pd_ev;         // computed value
+  AST_Expression               *pd_v1;         // 1st sub-expression
+  AST_Expression               *pd_v2;         // 2nd sub-expression
+  UTL_ScopedName               *pd_n;          // symbolic name (if any)
+
+  // Operations
+
+  // Fill out the lineno, filename and definition scope details
+  void                         fill_definition_details();
+
+  // Internal evaluation
+  virtual AST_ExprValue *eval_internal(EvalKind ek);
+};
+
+#endif           // _AST_EXPR_VAL_AST_EXPR_VAL_HH
+
+
diff --git a/src/xlat-idl/ast_extern.hh b/src/xlat-idl/ast_extern.hh
new file mode 100644 (file)
index 0000000..7dc0f4e
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_EXTERN_AST_EXTERN_HH
+#define _AST_EXTERN_AST_EXTERN_HH
+
+// #pragma ident "%@(#)ast_extern.h    1.40% %92/06/10% Sun Microsystems"
+
+// ast_extern.hh
+//
+// Declares all global functions for the AST
+
+/*
+** DEPENDENCIES: none
+**
+** USE: Included from idl_extern.hh
+*/
+
+// Functions:
+
+// Two functions are provided for storing AST nodes representing fwd
+// declared interfaces, and for checking the stored nodes after parsing
+// the entire AST. The check ensures that for each fwd declared interface
+// the full definition was also seen.
+
+extern void    AST_record_fwd_interface(AST_InterfaceFwd *i);
+extern void    AST_check_fwd_interface();
+
+extern idl_bool        AST_illegal_recursive_type(AST_Decl *t);
+
+#endif           // _AST_EXTERN_AST_EXTERN_HH
+
diff --git a/src/xlat-idl/ast_field.cc b/src/xlat-idl/ast_field.cc
new file mode 100644 (file)
index 0000000..6cd9912
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_field.cc    1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_field.cc - Implementation of class AST_Field
+ *
+ * AST_Fields denote fields in IDL structure, union and exception
+ * declarations. AST_Field is also used as a superclass of AST_Argument
+ * and AST_UnionBranch.
+ * AST_Fields have a field type (a subclass of AST_Type) and a name
+ * (a UTL_ScopedName)
+ *
+ * AST_Field supplies two constructors, one to be used in constructing
+ * AST_Field nodes, the other to be used in constructing AST_Argument
+ * nodes and AST_UnionBranch nodes.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+
+/*
+ * Default constructor
+ */
+AST_Field::AST_Field()
+        : pd_field_type(NULL)
+{
+}
+
+/*
+ * To be used when constructing an AST_Field node
+ */
+AST_Field::AST_Field(AST_Type *ft, UTL_ScopedName *n, UTL_StrList *p)
+        : AST_Decl(AST_Decl::NT_field, n, p),
+          pd_field_type(ft)
+{
+}
+
+/*
+ * To be used when constructing a node of a subclass of AST_Field
+ */
+AST_Field::AST_Field(AST_Decl::NodeType nt, AST_Type *ft,
+                  UTL_ScopedName *n, UTL_StrList *p)
+        : AST_Decl(nt, n, p),
+          pd_field_type(ft)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Dump this AST_Field node to the ostream o
+ */
+void
+AST_Field::dump(ostream &o)
+{
+  pd_field_type->local_name()->dump(o);
+  o << " ";
+  local_name()->dump(o);
+}
+
+/*
+ * Data accessors
+ */
+
+AST_Type *
+AST_Field::field_type()
+{
+  return pd_field_type;
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS1(AST_Field, AST_Decl)
+IMPL_NARROW_FROM_DECL(AST_Field)
diff --git a/src/xlat-idl/ast_field.hh b/src/xlat-idl/ast_field.hh
new file mode 100644 (file)
index 0000000..ad8aa68
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_FIELD_AST_FIELD_HH
+#define _AST_FIELD_AST_FIELD_HH
+
+// #pragma ident "%@(#)AST_Field.h     1.37% %92/06/10% Sun Microsystems"
+
+// Representation of a generic field
+//
+// Used as member in structures, exceptions and unions, and as a base
+// type for attributes and arguments to operations
+//
+// NOTE: There are two constructors here, the first is used when field
+// is used directly inside a structure, the second when it is used as
+// the base type for attributes and operations.
+
+/*
+** DEPENDENCIES: ast_decl.hh, ast_type.hh, utl_scoped_name.hh, utl_strlist.hh
+**
+** USE: Included from ast.hh
+*/
+
+#include       "idl_fwd.hh"
+#include       "idl_narrow.hh"
+#include       "ast_decl.hh"
+
+
+class  AST_Field : public virtual AST_Decl
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_Field();
+  AST_Field(AST_Type *field_type,
+           UTL_ScopedName *n, UTL_StrList *p);
+  AST_Field(AST_Decl::NodeType nt, AST_Type *field_type,
+           UTL_ScopedName *n, UTL_StrList *p);
+  virtual ~AST_Field() {}
+
+  // Data Accessors
+  AST_Type *field_type();
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_Field, AST_Decl);
+  DEF_NARROW_FROM_DECL(AST_Field);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+private:
+  // Data
+  AST_Type                     *pd_field_type; // Base type for field
+
+};
+
+#endif           // _AST_FIELD_AST_FIELD_HH
diff --git a/src/xlat-idl/ast_generator.cc b/src/xlat-idl/ast_generator.cc
new file mode 100644 (file)
index 0000000..cc24f79
--- /dev/null
@@ -0,0 +1,403 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_generator.cc        1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_generator.cc - Implements the base AST node generator
+ *
+ * The generator protocol is explained in detail in the IDL CFE
+ * design document.
+ * The AST_Generator class provides operations to instantiate any
+ * of the AST nodes. It contains an operation for every constructor
+ * of every AST class.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructors
+ */
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+/*
+ * Construct an AST_PredefinedType node (a predefined type)
+ */
+AST_PredefinedType *
+AST_Generator::create_predefined_type(AST_PredefinedType::PredefinedType t,
+                                   UTL_ScopedName *n,
+                                   UTL_StrList *p)
+{
+  return new AST_PredefinedType(t, n, p);
+}
+
+/*
+ * Construct an AST_Module node (a module)
+ */
+AST_Module     *
+AST_Generator::create_module(UTL_ScopedName *n, UTL_StrList *p)
+{
+  return new AST_Module(n, p);
+}
+
+/*
+ * Construct an AST_Root node (a node representing the root of an AST)
+ */
+AST_Root *
+AST_Generator::create_root(UTL_ScopedName *n,
+                         UTL_StrList *p)
+{
+    return new AST_Root(n, p);
+}
+
+/*
+ * Construct an AST_Interface node (an interface)
+ */
+AST_Interface  *
+AST_Generator::create_interface(UTL_ScopedName *n,
+                              AST_Interface **ih,
+                              long nih,
+                              UTL_StrList *p)
+{
+  return new AST_Interface(n, ih, nih, p);
+}
+
+/*
+ * Construct an AST_InterfaceFwd node (a node representing the forward
+ * declaration of an interface)
+ */
+AST_InterfaceFwd *
+AST_Generator::create_interface_fwd(UTL_ScopedName *n, UTL_StrList *p)
+{
+  return new AST_InterfaceFwd(n, p);
+}
+
+/*
+ * Construct an AST_Exception node (an exception)
+ */
+AST_Exception  *
+AST_Generator::create_exception(UTL_ScopedName *n, UTL_StrList *p)
+{
+  return new AST_Exception(n, p);
+}
+
+/*
+ * Construct an AST_Structure node (a struct)
+ */
+AST_Structure  *
+AST_Generator::create_structure(UTL_ScopedName *n, UTL_StrList *p)
+{
+  return new AST_Structure(n, p);
+}
+
+/*
+ * Construct an AST_Enum node (an enum)
+ */
+AST_Enum       *
+AST_Generator::create_enum(UTL_ScopedName *n, UTL_StrList *p)
+{
+  return new AST_Enum(n, p);
+}
+
+/*
+ * Construct an AST_Operation node (an operation on an interface)
+ */
+AST_Operation  *
+AST_Generator::create_operation(AST_Type *rt,
+                              AST_Operation::Flags fl,
+                              UTL_ScopedName *n,
+                              UTL_StrList *p)
+{
+  return new AST_Operation(rt, fl, n, p);
+}
+
+/*
+ * Construct an AST_Field node (a field in a struct, union or exception)
+ */
+AST_Field      *
+AST_Generator::create_field(AST_Type *ft, UTL_ScopedName *n, UTL_StrList *p)
+{
+  return new AST_Field(ft, n, p);
+}
+
+/*
+ * Construct an AST_Argument node (an argument to an operation)
+ */
+AST_Argument   *
+AST_Generator::create_argument(AST_Argument::Direction d,
+                             AST_Type *ft,
+                             UTL_ScopedName *n,
+                             UTL_StrList *p)
+{
+  return new AST_Argument(d, ft, n, p);
+}
+
+/*
+ * Construct an AST_Attribute node (an attribute)
+ */
+AST_Attribute  *
+AST_Generator::create_attribute(idl_bool ro,
+                              AST_Type *ft,
+                              UTL_ScopedName *n,
+                              UTL_StrList *p)
+{
+  return new AST_Attribute(ro, ft, n, p);
+}
+
+/*
+ * Construct an AST_Union node (a union)
+ */
+AST_Union      *
+AST_Generator::create_union(AST_ConcreteType *dt,
+                          UTL_ScopedName *n,
+                          UTL_StrList *p)
+{
+  return new AST_Union(dt, n, p);
+}
+
+/*
+ * Construct an AST_UnionBranch node (a branch in a union)
+ */
+AST_UnionBranch *
+AST_Generator::create_union_branch(AST_UnionLabel *lab,
+                                AST_Type *ft,
+                                UTL_ScopedName *n,
+                                UTL_StrList *p)
+{
+  return new AST_UnionBranch(lab, ft, n, p);
+}
+
+/*
+ * Construct an AST_UnionLabel node (a label in a union)
+ */
+AST_UnionLabel *
+AST_Generator::create_union_label(AST_UnionLabel::UnionLabel ul,
+                               AST_Expression *v)
+{
+  return new AST_UnionLabel(ul, v);
+}
+
+/*
+ * Construct an AST_Constant node (a constant)
+ */
+AST_Constant   *
+AST_Generator::create_constant(AST_Expression::ExprType et,
+                             AST_Expression *ev,
+                             UTL_ScopedName *n,
+                             UTL_StrList *p)
+{
+  return new AST_Constant(et, ev, n, p);
+}
+
+/*
+ * Construct an AST_Expression node denoting a symbolic name
+ */
+AST_Expression *
+AST_Generator::create_expr(UTL_ScopedName *n)
+{
+  return new AST_Expression(n);
+}
+
+/*
+ * Construct an AST_Expression denoting a coercion
+ */
+AST_Expression *
+AST_Generator::create_expr(AST_Expression *v, AST_Expression::ExprType t)
+{
+  return new AST_Expression(v, t);
+}
+
+/*
+ * Construct an AST_Expression node denoting a binary combinator
+ * of two other AST_Expression nodes
+ */
+AST_Expression *
+AST_Generator::create_expr(AST_Expression::ExprComb c,
+                          AST_Expression *v1,
+                          AST_Expression *v2)
+{
+  return new AST_Expression(c, v1, v2);
+}
+
+/*
+ * Construct an AST_Expression node denoting a long integer
+ */
+AST_Expression *
+AST_Generator::create_expr(long v)
+{
+  return new AST_Expression(v);
+}
+
+/*
+ * Construct an AST_Expression node denoting a long integer being used
+ * as a boolean
+ */
+AST_Expression *
+AST_Generator::create_expr(long v, AST_Expression::ExprType t)
+{
+  return new AST_Expression(v, t);
+}
+
+/*
+ * Construct an AST_Expression node denoting an unsigned long integer
+ */
+AST_Expression *
+AST_Generator::create_expr(unsigned long v)
+{
+  return new AST_Expression(v);
+}
+
+/*
+ * Construct an AST_Expression node denoting a string (a char *
+ * encapsulated as String)
+ */
+AST_Expression *
+AST_Generator::create_expr(String *s)
+{
+  return new AST_Expression(s);
+}
+
+/*
+ * Construct an AST_Expression node denoting a character
+ */
+AST_Expression *
+AST_Generator::create_expr(char c)
+{
+  return new AST_Expression(c);
+}
+
+/*
+ * Construct an AST_Expression node denoting a 64-bit floating point number
+ */
+AST_Expression *
+AST_Generator::create_expr(double d)
+{
+  return new AST_Expression(d);
+}
+
+/*
+ * Construct an AST_EnumVal node (an enumerator)
+ */
+AST_EnumVal    *
+AST_Generator::create_enum_val(unsigned long v,
+                            UTL_ScopedName *n,
+                            UTL_StrList *p)
+{
+  return new AST_EnumVal(v, n, p);
+}
+
+/*
+ * Construct an AST_Array node (an array type or field modifier)
+ */
+AST_Array      *
+AST_Generator::create_array(UTL_ScopedName *n,
+                          unsigned long ndims,
+                          UTL_ExprList *dims)
+{
+  return new AST_Array(n, ndims, dims);
+}
+
+/*
+ * Construct an AST_Sequence node (a sequence type definition)
+ */
+AST_Sequence   *
+AST_Generator::create_sequence(AST_Expression *ms, AST_Type *bt)
+{
+  return new AST_Sequence(ms, bt);
+}
+
+/*
+ * Construct an AST_String node (a string type definition)
+ */
+AST_String     *
+AST_Generator::create_string(AST_Expression *ms)
+{
+  return new AST_String(ms);
+}
+
+/*
+ * Construct an AST_String node denoting a wide string type definition
+ */
+AST_String     *
+AST_Generator::create_wstring(AST_Expression *ms)
+{
+  return new AST_String(ms, sizeof(wchar_t));
+}
+
+/*
+ * Construct an AST_Typedef node (a typedef)
+ */
+AST_Typedef    *
+AST_Generator::create_typedef(AST_Type *bt, UTL_ScopedName *n, UTL_StrList *p)
+{
+  return new AST_Typedef(bt, n, p);
+}
diff --git a/src/xlat-idl/ast_generator.hh b/src/xlat-idl/ast_generator.hh
new file mode 100644 (file)
index 0000000..96f3694
--- /dev/null
@@ -0,0 +1,214 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_GENERATOR_AST_GENERATOR_HH
+#define _AST_GENERATOR_AST_GENERATOR_HH
+
+// #pragma ident "%@(#)AST_Generator.h 1.22% %92/06/10% Sun Microsystems"
+
+// ast_generator.h
+//
+// Defines base class for generators
+
+/*
+** DEPENDENCIES: ast_predefined_type.hh utl_scoped_name.hh utl_strlist.hh
+**              ast_module.hh ast_root.hh ast_interface.hh
+**              ast_interface_fwd.hh ast_exception.hh ast_structure.hh
+**              ast_enum.hh ast_operation.hh ast_type.hh ast_field.hh
+**              ast_argument.hh ast_attribute.hh ast_union.hh
+**              ast_concrete_type.hh ast_union_branch.hh ast_union_label.hh
+**              ast_expression.hh ast_enum_val.hh ast_array.hh
+**              ast_sequence.hh ast_string.hh ast_typedef.hh
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_Generator
+{
+public:
+  // Operations
+
+  // Create a node representing a predefined type
+  virtual AST_PredefinedType
+    *create_predefined_type(AST_PredefinedType::PredefinedType t,
+                           UTL_ScopedName *n,
+                           UTL_StrList *p);
+
+  // Create a node representing a module
+  virtual AST_Module   *create_module(UTL_ScopedName *n,
+                                      UTL_StrList *p);
+
+  // Create a node representing a module which is the root of an AST
+  virtual AST_Root     *create_root(UTL_ScopedName *n,
+                                    UTL_StrList *p);
+
+  // Create a node representing an interface
+  virtual AST_Interface        *create_interface(UTL_ScopedName *n,
+                                         AST_Interface **ih,
+                                         long nih,
+                                         UTL_StrList *p);
+
+  // Create a node representing a forward declaration of an interface
+  virtual AST_InterfaceFwd *create_interface_fwd(UTL_ScopedName *n,
+                                                UTL_StrList *p);
+
+  // Create a node representing an exception
+  virtual AST_Exception        *create_exception(UTL_ScopedName *n,
+                                         UTL_StrList *p);
+
+  // Create a node representing a structure
+  virtual AST_Structure        *create_structure(UTL_ScopedName *n,
+                                         UTL_StrList *p);
+
+  // Create a node representing an enum
+  virtual AST_Enum     *create_enum(UTL_ScopedName *n,
+                                    UTL_StrList *p);
+
+  // Create a node representing an operation on an interface
+  virtual AST_Operation        *create_operation(AST_Type *rt,
+                                         AST_Operation::Flags fl,
+                                         UTL_ScopedName *n,
+                                         UTL_StrList *p);
+
+  // Create a node representing a field in a structure, exception or
+  // union
+  virtual AST_Field    *create_field(AST_Type *ft,
+                                     UTL_ScopedName *n,
+                                     UTL_StrList *p);
+
+  // Create a node representing an argument to an operation
+  virtual AST_Argument *create_argument(AST_Argument::Direction d,
+                                        AST_Type *ft,
+                                        UTL_ScopedName *n,
+                                        UTL_StrList *p);
+
+  // Create a node representing an attribute
+  virtual AST_Attribute        *create_attribute(idl_bool ro,
+                                         AST_Type *ft,
+                                         UTL_ScopedName *n,
+                                         UTL_StrList *p);
+
+  // Create a node representing a union
+  virtual AST_Union    *create_union(AST_ConcreteType *dt,
+                                     UTL_ScopedName *n,
+                                     UTL_StrList *p);
+
+  // Create a node representing one branch in a union
+  virtual AST_UnionBranch *create_union_branch(AST_UnionLabel *lab,
+                                              AST_Type *ft,
+                                              UTL_ScopedName *n,
+                                              UTL_StrList *p);
+
+  // Create a node representing a label on a union branch
+  virtual AST_UnionLabel *create_union_label(AST_UnionLabel::UnionLabel ul,
+                                            AST_Expression *lv);
+
+  // Create a node representing a constant
+  virtual AST_Constant *create_constant(AST_Expression::ExprType et,
+                                        AST_Expression *ev,
+                                        UTL_ScopedName *n,
+                                        UTL_StrList *p);
+
+  // Create various kinds of nodes representing expressions
+  virtual AST_Expression       *create_expr(UTL_ScopedName *n);
+  virtual AST_Expression       *create_expr(AST_Expression *v,
+                                            AST_Expression::ExprType t);
+  virtual AST_Expression       *create_expr(AST_Expression::ExprComb c,
+                                            AST_Expression *v1,
+                                            AST_Expression *v2);
+  virtual AST_Expression       *create_expr(long v);
+  virtual AST_Expression       *create_expr(long v,
+                                            AST_Expression::ExprType t);
+  virtual AST_Expression       *create_expr(unsigned long v);
+  virtual AST_Expression       *create_expr(String *s);
+  virtual AST_Expression       *create_expr(char c);
+  virtual AST_Expression       *create_expr(double d);
+
+  // Create a node representing an enumerator
+  virtual AST_EnumVal  *create_enum_val(unsigned long v,
+                                        UTL_ScopedName *n,
+                                        UTL_StrList *p);
+
+  // Create a node representing an array type
+  virtual AST_Array    *create_array(UTL_ScopedName *n,
+                                     unsigned long ndims,
+                                     UTL_ExprList *dims);
+
+  // Create a node representing a sequence type
+  virtual AST_Sequence *create_sequence(AST_Expression *v,
+                                        AST_Type *bt);
+
+  // Create a node representing a string type
+  virtual AST_String   *create_string(AST_Expression *v);
+
+  // Create a node representing a wide string type
+  virtual AST_String   *create_wstring(AST_Expression *v);
+
+  // Create a node representing a type renaming (typedef)
+  virtual AST_Typedef  *create_typedef(AST_Type *bt,
+                                       UTL_ScopedName *n,
+                                       UTL_StrList *p);
+};
+
+#endif           // _AST_GENERATOR_AST_GENERATOR_HH
diff --git a/src/xlat-idl/ast_interface.cc b/src/xlat-idl/ast_interface.cc
new file mode 100644 (file)
index 0000000..77b9397
--- /dev/null
@@ -0,0 +1,562 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_interface.cc        1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_interface.cc - Implementation of class AST_Interface
+ *
+ * AST_Interfaces denote IDL interface definitions
+ * AST_Interfaces are subclasses of AST_Type and UTL_Scope
+ * AST_Interfaces have an array of inherited interfaces and
+ * a count of the number of inherited interfaces. This count
+ * represents the total number of unique (recursively) inherited
+ * interfaces.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_Interface::AST_Interface()
+            : pd_n_inherits(0),
+              pd_inherits(NULL)
+{
+}
+
+AST_Interface::AST_Interface(UTL_ScopedName *n,
+                            AST_Interface **ih,
+                            long nih,
+                            UTL_StrList *p)
+           : AST_Decl(AST_Decl::NT_interface, n, p),
+             UTL_Scope(AST_Decl::NT_interface),
+             pd_n_inherits(nih),
+             pd_inherits(ih)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Add an AST_Constant node (a constant declaration) to this scope
+ */
+AST_Constant *AST_Interface::fe_add_constant(AST_Constant *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add an AST_Exception node (an exception declaration) to this scope
+ */
+AST_Exception *AST_Interface::fe_add_exception(AST_Exception *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add an AST_Attribute node (an attribute declaration) to this scope
+ */
+AST_Attribute *AST_Interface::fe_add_attribute(AST_Attribute *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add an AST_Operation node (an operation declaration) to this scope
+ */
+AST_Operation *AST_Interface::fe_add_operation(AST_Operation *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add an AST_Structure (a struct declaration) to this scope
+ */
+AST_Structure *AST_Interface::fe_add_structure(AST_Structure *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add an AST_Enum node (an enum declaration) to this scope
+ */
+AST_Enum *AST_Interface::fe_add_enum(AST_Enum *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add an AST_Union (a union declaration) to this scope
+ */
+AST_Union *AST_Interface::fe_add_union(AST_Union *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add an AST_EnumVal node (an enumerator) to this scope.
+ * This is done to conform to the C++ scoping rules which declare
+ * enumerators in the enclosing scope (in addition to declaring them
+ * in the enum itself)
+ */
+AST_EnumVal *AST_Interface::fe_add_enum_val(AST_EnumVal *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add an AST_Typedef (a typedef) to the current scope
+ */
+AST_Typedef *AST_Interface::fe_add_typedef(AST_Typedef *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Can't add to interface which was not yet defined
+   */
+  if (!is_defined()) {
+    idl_global->err()->error2(UTL_Error::EIDL_DECL_NOT_DEFINED, this, t);
+    return NULL;
+  }
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Dump this AST_Interface node to the ostream o
+ */
+void
+AST_Interface::dump(ostream &o)
+{
+  long i;
+
+  o << "interface ";
+  local_name()->dump(o);
+  o << " ";
+  if (pd_n_inherits > 0) {
+    o << ": ";
+    for (i = 0; i < pd_n_inherits; i++) {
+      pd_inherits[i]->local_name()->dump(o);
+      if (i < pd_n_inherits - 1)
+       o << ", ";
+    }
+  }
+  o << " {\n";
+  UTL_Scope::dump(o);
+  idl_global->indent()->skip_to(o);
+  o << "}";
+}
+
+/*
+ * Data accessors
+ */
+
+AST_Interface  **
+AST_Interface::inherits()
+{
+  return pd_inherits;
+}
+
+void
+AST_Interface::set_inherits(AST_Interface **i)
+{
+  pd_inherits = i;
+}
+
+long
+AST_Interface::n_inherits()
+{
+  return pd_n_inherits;
+}
+
+void
+AST_Interface::set_n_inherits(long i)
+{
+  pd_n_inherits = i;
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS2(AST_Interface, AST_Type, UTL_Scope)
+IMPL_NARROW_FROM_DECL(AST_Interface)
+IMPL_NARROW_FROM_SCOPE(AST_Interface)
diff --git a/src/xlat-idl/ast_interface.hh b/src/xlat-idl/ast_interface.hh
new file mode 100644 (file)
index 0000000..2229bff
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_INTERFACE_AST_INTERFACE_HH
+#define _AST_INTERFACE_AST_INTERFACE_HH
+
+// #pragma ident "%@(#)AST_Interface.h 1.37% %92/06/10% Sun Microsystems"
+
+// Representation of interface:
+//
+// NOTE: add(AST_EnumValue *) is defined here because enums can
+// be defined manifest locally; the constants defined in these
+// enums are inserted in the enclosing scope.
+
+/*
+** DEPENDENCIES: ast_type.hh, utl_scope.hh, ast_decl.hh, utl_strlist.hh
+**
+** USE: Included from ast.hh
+*/
+
+#include       "idl_fwd.hh"
+#include       "idl_narrow.hh"
+#include       "ast_type.hh"
+#include       "utl_scope.hh"
+#include       "ast_decl.hh"
+
+
+class  AST_Interface : public virtual AST_Type, public virtual UTL_Scope
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_Interface();
+  AST_Interface(UTL_ScopedName *n,
+               AST_Interface **ih,
+               long nih,
+               UTL_StrList *p);
+  virtual ~AST_Interface() {}
+
+  // Data Accessors
+  AST_Interface        **inherits();
+  void set_inherits(AST_Interface **i);
+  long n_inherits();
+  void set_n_inherits(long i);
+
+  // Is this interface defined? This predicate returns FALSE when an
+  // interface was forward declared but not defined yet, and TRUE in
+  // all other cases.
+  idl_bool is_defined()
+  {
+    return (pd_n_inherits < 0) ? I_FALSE : I_TRUE;
+  }
+
+  // Narrowing
+  DEF_NARROW_METHODS2(AST_Interface, AST_Type, UTL_Scope);
+  DEF_NARROW_FROM_DECL(AST_Interface);
+  DEF_NARROW_FROM_SCOPE(AST_Interface);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+private:
+  // Data
+  AST_Interface                        **pd_inherits;  // Inherited interfaces
+                                               // This is an array of pointers
+                                               // to the inherited interfaces
+  long                         pd_n_inherits;  // How many of them?
+
+  // Scope Management Protocol
+  friend int yyparse();
+
+  virtual AST_Constant         *fe_add_constant(AST_Constant   *c);
+  virtual AST_Exception                *fe_add_exception(AST_Exception *e);
+  virtual AST_Attribute                *fe_add_attribute(AST_Attribute *a);
+  virtual AST_Operation                *fe_add_operation(AST_Operation *o);
+  virtual AST_Union            *fe_add_union(AST_Union         *u);
+  virtual AST_Structure                *fe_add_structure(AST_Structure *s);
+  virtual AST_Enum             *fe_add_enum(AST_Enum           *e);
+  virtual AST_EnumVal          *fe_add_enum_val(AST_EnumVal    *v);
+  virtual AST_Typedef          *fe_add_typedef(AST_Typedef     *t);
+
+};
+
+#endif           // _AST_INTERFACE_AST_INTERFACE_HH
diff --git a/src/xlat-idl/ast_interface_fwd.cc b/src/xlat-idl/ast_interface_fwd.cc
new file mode 100644 (file)
index 0000000..2e5c17a
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_interface_fwd.cc    1.44% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_interface_fwd.cc - Implementation of class AST_InterfaceFwd
+ *
+ * AST_InterfaceFwd nodes denote forward declarations of IDL interfaces
+ * AST_InterfaceFwd nodes have a field containing the full declaration
+ * of the interface, which is initialized when that declaration is
+ * encountered.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_InterfaceFwd::AST_InterfaceFwd()
+               : pd_full_definition(NULL)
+{
+}
+
+AST_InterfaceFwd::AST_InterfaceFwd(UTL_ScopedName *n, UTL_StrList *p)
+                : AST_Decl(AST_Decl::NT_interface_fwd, n, p)
+{
+  /*
+   * Create a dummy placeholder for the forward declared interface. This
+   * interface node is not yet defined (n_inherits < 0), so some operations
+   * will fail
+   */
+  pd_full_definition = idl_global->gen()->create_interface(n, NULL, -1, p);
+  /*
+   * Record the node in a list to be checked after the entire AST has been
+   * parsed. All nodes in the list must have n_inherits >= 0, else this
+   * indicates that a full definition was not seen for this forward
+   * delcared interface
+   */
+  AST_record_fwd_interface(this);
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Dump this AST_InterfaceFwd node to the ostream o
+ */
+void
+AST_InterfaceFwd::dump(ostream &o)
+{
+  o << "interface ";
+  local_name()->dump(o);
+}
+
+/*
+ * Data accessors
+ */
+
+AST_Interface  *
+AST_InterfaceFwd::full_definition()
+{
+  return pd_full_definition;
+}
+
+void
+AST_InterfaceFwd::set_full_definition(AST_Interface *nfd)
+{
+  pd_full_definition = nfd;
+}    
+
+/*
+ * Narrowing methods 
+ */
+IMPL_NARROW_METHODS1(AST_InterfaceFwd, AST_Type)
+IMPL_NARROW_FROM_DECL(AST_InterfaceFwd)
diff --git a/src/xlat-idl/ast_interface_fwd.hh b/src/xlat-idl/ast_interface_fwd.hh
new file mode 100644 (file)
index 0000000..58b8706
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_INTERFACE_FWD_AST_INTERFACE_FWD_HH
+#define _AST_INTERFACE_FWD_AST_INTERFACE_FWD_HH
+
+// #pragma ident "%@(#)AST_InterfaceFwd.h      1.37% %92/06/10% Sun Microsystems"
+
+// Representation of a forward interface declaration
+
+/*
+** DEPENDENCIES: ast_decl.hh, ast_interface.hh, utl_scoped_name.hh,
+**              utl_strlist.hh
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_InterfaceFwd : public virtual AST_Type
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_InterfaceFwd();
+  AST_InterfaceFwd(UTL_ScopedName *n, UTL_StrList *p);
+  virtual ~AST_InterfaceFwd() {}
+
+  // Data Accessors
+  AST_Interface        *full_definition();
+  void set_full_definition(AST_Interface *nfd);
+
+  // Narrowing
+  DEF_NARROW_METHODS1(AST_InterfaceFwd, AST_Type);
+  DEF_NARROW_FROM_DECL(AST_InterfaceFwd);
+
+  // AST Dumping
+  virtual void         dump(ostream &);
+
+private:
+  // Data
+  AST_Interface                *pd_full_definition;    // The interface this is a
+                                               // forward declaration of
+};
+
+#endif           // _AST_INTERFACE_FWD_AST_INTERFACE_FWD_HH
diff --git a/src/xlat-idl/ast_module.cc b/src/xlat-idl/ast_module.cc
new file mode 100644 (file)
index 0000000..e60ef5e
--- /dev/null
@@ -0,0 +1,556 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_module.cc   1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_module.cc - Implementation of class AST_Module
+ *
+ * AST_Modules denote IDL module declarations
+ * AST_Modules are subclasses of AST_Decl (they are not a type!) and
+ * of UTL_Scope.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_Module::AST_Module()
+{
+}
+
+AST_Module::AST_Module(UTL_ScopedName *n, UTL_StrList *p)
+        : AST_Decl(AST_Decl::NT_module, n, p),
+          UTL_Scope(AST_Decl::NT_module)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Add this AST_PredefinedType node (a predefined type declaration) to
+ * this scope
+ */
+AST_PredefinedType *AST_Module::fe_add_predefined_type(AST_PredefinedType *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Module node (a module declaration) to this scope
+ */
+AST_Module *AST_Module::fe_add_module(AST_Module *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Interface node (an interface declaration) to this scope
+ */
+AST_Interface *AST_Module::fe_add_interface(AST_Interface *t)
+{
+  AST_Decl             *predef;
+  AST_Interface                *fwd;
+
+  /*
+   * Already defined?
+   */
+  if ((predef = lookup_for_add(t, I_FALSE)) != NULL) {
+    /*
+     * Treat fwd declared interfaces specially
+     */
+    if (predef->node_type() == AST_Decl::NT_interface) {
+      fwd = AST_Interface::narrow_from_decl(predef);
+
+      if (fwd == NULL)
+          return NULL;
+      
+      if (!fwd->is_defined()) {        /* Forward declared and not defined yet */
+       if (fwd->defined_in() != this) {
+         idl_global->err()
+            ->error3(UTL_Error::EIDL_SCOPE_CONFLICT, fwd, t, this);
+         return NULL;
+        }
+      }
+      /*
+       * OK, not illegal redef of forward declaration. Now check whether
+       * it has been referenced already
+       */
+      else if (referenced(predef)) {
+        idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, predef);
+       return NULL;
+      }
+    } else if (!can_be_redefined(predef)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, predef);
+      return NULL;
+    } else if (referenced(predef)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, predef);
+      return NULL;
+    } else if (t->has_ancestor(predef)) {
+      idl_global->err()->redefinition_in_scope(t, predef);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_InterfaceFwd node (a forward declaration of an IDL
+ * interface) to this scope
+ */
+AST_InterfaceFwd *AST_Module::fe_add_interface_fwd(AST_InterfaceFwd *i)
+{
+  AST_Decl     *d;
+  AST_Interface        *itf;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(i, I_FALSE)) != NULL) {
+    if (d->node_type() == AST_Decl::NT_interface &&
+       d->defined_in() == this) {
+      itf = AST_Interface::narrow_from_decl(d);
+      if (itf == NULL)
+          return NULL;
+      
+      i->set_full_definition(itf);
+      return i;
+    }
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, i, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, i, this, d);
+      return NULL;
+    }
+    if (i->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(i, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(i);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(i, I_FALSE);
+
+  return i;
+}
+
+/*
+ * Add this AST_Constant node (a constant declaration) to this scope
+ */
+AST_Constant *AST_Module::fe_add_constant(AST_Constant *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Exception node (an exception declaration) to this scope
+ */
+AST_Exception *AST_Module::fe_add_exception(AST_Exception *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Union node (a union declaration) to this scope
+ */
+AST_Union *AST_Module::fe_add_union(AST_Union *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Structure node (a struct declaration) to this scope
+ */
+AST_Structure *AST_Module::fe_add_structure(AST_Structure *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Enum node (an enum declaration) to this scope
+ */
+AST_Enum *AST_Module::fe_add_enum(AST_Enum *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_EnumVal node (an enumerator declaration) to this scope
+ * This is done to conform to the C++ scoping rules which declare
+ * enumerators in the enclosing scope (in addition to declaring them
+ * in the enum itself)
+ */
+AST_EnumVal *AST_Module::fe_add_enum_val(AST_EnumVal *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Add this AST_Typedef node (a typedef) to this scope
+ */
+AST_Typedef *AST_Module::fe_add_typedef(AST_Typedef *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_for_add(t, I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Dump this AST_Module node to the ostream o
+ */
+void
+AST_Module::dump(ostream &o)
+{
+  o << "module ";
+  local_name()->dump(o);
+  o << " {\n";
+  UTL_Scope::dump(o);
+  idl_global->indent()->skip_to(o);
+  o << "}";
+}
+
+/*
+ * Narrowing methods
+ */
+IMPL_NARROW_METHODS2(AST_Module, AST_Decl, UTL_Scope)
+IMPL_NARROW_FROM_DECL(AST_Module)
+IMPL_NARROW_FROM_SCOPE(AST_Module)
diff --git a/src/xlat-idl/ast_module.hh b/src/xlat-idl/ast_module.hh
new file mode 100644 (file)
index 0000000..5690263
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_MODULE_AST_MODULE_HH
+#define _AST_MODULE_AST_MODULE_HH
+
+// #pragma ident "%@(#)AST_Module.h    1.37% %92/06/10% Sun Microsystems"
+
+// Representation of module
+//
+// NOTE: add(AST_EnumValue *) is defined here because enums can
+// be defined manifest locally; the constants defined in these
+// enums are inserted in the enclosing scope.
+
+/*
+** DEPENDENCIES: ast_decl.hh, utl_scope.hh, utl_scoped_name.hh, utl_strlist.hh
+**
+** USE: Included from ast.hh
+*/
+
+class  AST_Module : public virtual AST_Decl, public virtual UTL_Scope
+{
+public:
+  // Operations
+
+  // Constructor(s)
+  AST_Module();
+  AST_Module(UTL_ScopedName *n, UTL_StrList *p);
+  virtual ~AST_Module() {}
+
+  // Narrowing
+  DEF_NARROW_METHODS2(AST_Module, AST_Decl, UTL_Scope);
+  DEF_NARROW_FROM_DECL(AST_Module);
+  DEF_NARROW_FROM_SCOPE(AST_Module);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+private:
+  friend void fe_populate(AST_Module *m);
+  friend int yyparse();
+
+  // Scope Management Protocol
+
+  virtual AST_PredefinedType   *fe_add_predefined_type(AST_PredefinedType *t);
+  virtual AST_Module           *fe_add_module(AST_Module               *m);
+  virtual AST_Interface                *fe_add_interface(AST_Interface         *i);
+  virtual AST_InterfaceFwd     *fe_add_interface_fwd(AST_InterfaceFwd  *i);
+  virtual AST_Constant         *fe_add_constant(AST_Constant           *c);
+  virtual AST_Exception                *fe_add_exception(AST_Exception         *e);
+  virtual AST_Union            *fe_add_union(AST_Union                 *u);
+  virtual AST_Structure                *fe_add_structure(AST_Structure         *s);
+  virtual AST_Enum             *fe_add_enum(AST_Enum                   *e);
+  virtual AST_EnumVal          *fe_add_enum_val(AST_EnumVal            *v);
+  virtual AST_Typedef          *fe_add_typedef(AST_Typedef             *t);
+
+};
+
+#endif           // _AST_MODULE_AST_MODULE_HH
diff --git a/src/xlat-idl/ast_operation.cc b/src/xlat-idl/ast_operation.cc
new file mode 100644 (file)
index 0000000..6056556
--- /dev/null
@@ -0,0 +1,325 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_operation.cc        1.46% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_operation.cc - Implementation of class AST_Operation
+ *
+ * AST_Operation nodes denote IDL operation declarations
+ * AST_Operations are a subclass of AST_Decl (they are not a type!)
+ * and of UTL_Scope (the arguments are managed in a scope).
+ * AST_Operations have a return type (a subclass of AST_Type),
+ * a bitfield for denoting various properties of the operation (the
+ * values are ORed together from constants defined in the enum
+ * AST_Operation::FLags), a name (a UTL_ScopedName), a context
+ * (implemented as a list of Strings, a UTL_StrList), and a raises
+ * clause (implemented as an array of AST_Exceptions).
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s) and destructor
+ */
+AST_Operation::AST_Operation()
+            : pd_flags(OP_noflags),
+              pd_return_type(NULL),
+              pd_context(NULL),
+              pd_exceptions(NULL)
+{
+}
+
+AST_Operation::AST_Operation(AST_Type *rt, Flags fl, UTL_ScopedName *n,
+                          UTL_StrList *p)
+            : pd_return_type(rt),
+              pd_flags(fl),
+              pd_context(NULL),
+              pd_exceptions(NULL),
+              AST_Decl(AST_Decl::NT_op, n, p),
+              UTL_Scope(AST_Decl::NT_op)
+{
+  AST_PredefinedType *pdt;
+
+  /*
+   * Check that if the operation is oneway, the return type must be void
+   */
+  if (rt != NULL && pd_flags == OP_oneway) {
+    if (rt->node_type() != AST_Decl::NT_pre_defined)
+      idl_global->err()->error1(UTL_Error::EIDL_NONVOID_ONEWAY, this);
+    else {
+      pdt = AST_PredefinedType::narrow_from_decl(rt);
+      if (pdt == NULL || pdt->pt() != AST_PredefinedType::PT_void)
+        idl_global->err()->error1(UTL_Error::EIDL_NONVOID_ONEWAY, this);
+    }
+  }
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Add this context (a UTL_StrList) to this scope
+ */
+UTL_StrList *
+AST_Operation::fe_add_context(UTL_StrList *t)
+{
+  pd_context = t;
+
+  return t;
+}
+
+/*
+ * Add these exceptions (identified by name) to this scope.
+ * This looks up each name to resolve it to the name of a known
+ * exception, and then adds the referenced exception to the list
+ * of exceptions that this operation can raise.
+ *
+ * NOTE: No attempt is made to ensure that exceptions are mentioned
+ *       only once..
+ */
+UTL_NameList *
+AST_Operation::fe_add_exceptions(UTL_NameList *t)
+{
+  UTL_NamelistActiveIterator *nl_i;
+  UTL_ScopedName            *nl_n;
+  UTL_Scope                 *fs = idl_global->scopes()->top();
+  AST_Exception                     *fe;
+  AST_Decl                  *d;
+
+  pd_exceptions = NULL;
+  nl_i = new UTL_NamelistActiveIterator(t);
+  while (!(nl_i->is_done())) {
+    nl_n = nl_i->item();
+    d = lookup_by_name(nl_n, I_TRUE);
+    if (d == NULL || d->node_type() != AST_Decl::NT_except) {
+      idl_global->err()->lookup_error(nl_n);
+      delete nl_i;
+      return NULL;
+    }
+    fe = AST_Exception::narrow_from_decl(d);
+    if (fe == NULL) {
+      idl_global->err()->error1(UTL_Error::EIDL_ILLEGAL_RAISES, this);
+      return NULL;
+    }
+    if (pd_exceptions == NULL)
+      pd_exceptions = new UTL_ExceptList(fe, NULL);
+    else
+      pd_exceptions->nconc(new UTL_ExceptList(fe, NULL));
+    nl_i->next();
+  }
+  delete nl_i;
+
+  return t;
+}
+
+/*
+ * Add this AST_Argument node (an operation argument declaration)
+ * to this scope
+ */
+AST_Argument *AST_Operation::fe_add_argument(AST_Argument *t)
+{
+  AST_Decl *d;
+
+  /*
+   * Already defined and cannot be redefined? Or already used?
+   */
+  if ((d = lookup_by_name_local(t->local_name(), I_FALSE)) != NULL) {
+    if (!can_be_redefined(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_REDEF, t, this, d);
+      return NULL;
+    }
+    if (referenced(d)) {
+      idl_global->err()->error3(UTL_Error::EIDL_DEF_USE, t, this, d);
+      return NULL;
+    }
+    if (t->has_ancestor(d)) {
+      idl_global->err()->redefinition_in_scope(t, d);
+      return NULL;
+    }
+  }
+  /*
+   * Cannot add OUT or INOUT argument to oneway operation
+   */
+  if ((t->direction() == AST_Argument::dir_OUT ||
+       t->direction() == AST_Argument::dir_INOUT) &&
+      pd_flags == OP_oneway) {
+    idl_global->err()->error2(UTL_Error::EIDL_ONEWAY_CONFLICT, t, this);
+    return NULL;
+  }
+  /*
+   * Add it to scope
+   */
+  add_to_scope(t);
+  /*
+   * Add it to set of locally referenced symbols
+   */
+  add_to_referenced(t, I_FALSE);
+
+  return t;
+}
+
+/*
+ * Dump this AST_Operation node (an operation) to the ostream o
+ */
+void
+AST_Operation::dump(ostream &o)
+{
+  UTL_ScopeActiveIterator   *i;
+  UTL_StrlistActiveIterator *si;
+  UTL_ExceptlistActiveIterator *ei;
+  AST_Decl                 *d;
+  AST_Exception                    *e;
+  String                   *s;
+
+  if (pd_flags == OP_oneway)
+    o << "oneway ";
+  else if (pd_flags == OP_idempotent)
+    o << "idempotent ";
+
+  i = new UTL_ScopeActiveIterator(this, IK_decls);
+  pd_return_type->name()->dump(o);
+  o << " ";
+  local_name()->dump(o);
+  o << "(";
+  while (!(i->is_done())) {
+    d = i->item();
+    d->dump(o);
+    i->next();
+    if (!(i->is_done()))
+      o << ", ";
+  }
+  delete i;
+  o << ")";
+
+  if (pd_exceptions != NULL) {
+    o << " raises(";
+    ei = new UTL_ExceptlistActiveIterator(pd_exceptions);
+    while (!(ei->is_done())) {
+      e = ei->item();
+      ei->next();
+      e->local_name()->dump(o);
+      if (!(ei->is_done()))
+       o << ", ";
+    }
+    delete ei;
+    o << ")";
+  }
+  if (pd_context != NULL) {
+    o << " context(";
+    si = new UTL_StrlistActiveIterator(pd_context);
+    while (!(si->is_done())) {
+      s = si->item();
+      si->next();
+      o << s->get_string();
+      if (!(si->is_done()))
+       o << ", ";
+    }
+    delete si;
+    o << ")";
+  }    
+}
+
+/*
+ * Data accessors
+ */
+
+AST_Type *
+AST_Operation::return_type()
+{
+  return pd_return_type;
+}
+
+AST_Operation::Flags
+AST_Operation::flags()
+{
+  return pd_flags;
+}
+
+UTL_StrList *
+AST_Operation::context()
+{
+  return pd_context;
+}
+
+UTL_ExceptList *
+AST_Operation::exceptions()
+{
+  return pd_exceptions;
+}
+
+// Narrowing
+IMPL_NARROW_METHODS2(AST_Operation, AST_Decl, UTL_Scope)
+IMPL_NARROW_FROM_DECL(AST_Operation)
+IMPL_NARROW_FROM_SCOPE(AST_Operation)
diff --git a/src/xlat-idl/ast_operation.hh b/src/xlat-idl/ast_operation.hh
new file mode 100644 (file)
index 0000000..6ec5a1c
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+#ifndef _AST_OPERATION_AST_OPERATION_HH
+#define _AST_OPERATION_AST_OPERATION_HH
+
+// #pragma ident "%@(#)AST_Operation.h 1.37% %92/06/10% Sun Microsystems"
+
+// Representation of operation declaration:
+
+/*
+** DEPENDENCIES: ast_decl.hh, utl_scope.hh, ast_type.hh, utl_strlist.hh,
+**              utl_exceptlist.hh, utl_scoped_name.hh
+**
+** USE: included from ast.hh
+*/
+
+#include       "idl_fwd.hh"
+#include       "idl_narrow.hh"
+#include       "utl_list.hh"
+#include       "ast_decl.hh"
+#include       "utl_scope.hh"
+#include       "utl_scoped_name.hh"
+
+
+class  AST_Operation : public virtual AST_Decl, public virtual UTL_Scope
+{
+public:
+  // Define enum with flags for operation attributes
+  enum Flags {
+       OP_noflags              // No flags present
+     , OP_oneway               // Operation is oneway
+     , OP_idempotent           // Operation is idempotent
+  };
+
+  // Operations
+
+  // Constructor(s)
+  AST_Operation();
+  AST_Operation(AST_Type *return_type,
+               Flags flags,
+               UTL_ScopedName *n,
+               UTL_StrList *p);
+  virtual ~AST_Operation() {}
+
+  // Data Accessors
+  AST_Type *return_type();
+  Flags flags();
+  UTL_StrList *context();
+  UTL_ExceptList *exceptions();
+  
+  // Narrowing
+  DEF_NARROW_METHODS2(AST_Operation, AST_Decl, UTL_Scope);
+  DEF_NARROW_FROM_DECL(AST_Operation);
+  DEF_NARROW_FROM_SCOPE(AST_Operation);
+
+  // AST Dumping
+  virtual void                 dump(ostream &o);
+
+private:
+  // Data
+  AST_Type                     *pd_return_type;        // Return type
+  Flags                                pd_flags;               // Operation flags
+  UTL_StrList                  *pd_context;            // Context
+  UTL_ExceptList               *pd_exceptions;         // Exceptions raised
+
+  // Scope Management Protocol
+  friend int yyparse();
+
+  virtual AST_Argument         *fe_add_argument(AST_Argument   *a);
+  virtual UTL_StrList          *fe_add_context(UTL_StrList     *c);    
+                                                       // Add context
+  virtual UTL_NameList         *fe_add_exceptions(UTL_NameList *e);
+                                                       // exceptions
+protected:
+  int p_isThreaded;
+public:
+  void set_threaded(int i) { p_isThreaded = i; }
+  int is_threaded() { return p_isThreaded; }
+};
+
+#endif           // _AST_OPERATION_AST_OPERATION_HH
diff --git a/src/xlat-idl/ast_predefined_type.cc b/src/xlat-idl/ast_predefined_type.cc
new file mode 100644 (file)
index 0000000..5fc0c9a
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF
+ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS
+FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF
+DEALING, USAGE OR TRADE PRACTICE.
+
+INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT
+ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES
+TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT.
+
+SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH
+RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY
+INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF.
+
+IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR
+ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL
+DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+Use, duplication, or disclosure by the government is subject to
+restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
+Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR
+52.227-19.
+
+Sun, Sun Microsystems and the Sun logo are trademarks or registered
+trademarks of Sun Microsystems, Inc.
+
+SunSoft, Inc.  
+2550 Garcia Avenue 
+Mountain View, California  94043
+
+NOTE:
+
+SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are
+trademarks or registered trademarks of Sun Microsystems, Inc.
+
+ */
+
+// #pragma ident "%@(#)ast_predefined_type.cc  1.47% %92/06/11% Sun Microsystems"
+
+/*
+ * ast_predefined_type.cc - Implementation of class AST_PredefinedType
+ *
+ * AST_PredefinedType nodes denote the various predefined types such
+ * as long, short, etc. that are available in IDL. Each AST_PredefinedType
+ * node has a field (the value of this field is from the enum
+ * AST_PredefinedType::PredefinedType) which denotes the specific predefined
+ * type that this node represents. There is only one node in the entire
+ * AST which represents each predefined type, such as long etc.
+ */
+
+#include       "idl.hh"
+#include       "idl_extern.hh"
+
+/*
+ * Constructor(s)
+ */
+AST_PredefinedType::AST_PredefinedType()
+                 : pd_pt(PT_long)
+{
+}
+
+AST_PredefinedType::AST_PredefinedType(PredefinedType t, UTL_ScopedName *n,
+                                      UTL_StrList *p)
+                  : AST_Decl(AST_Decl::NT_pre_defined, n, p),
+                    pd_pt(t)
+{
+}
+
+/*
+ * Private operations
+ */
+
+/*
+ * Public operations
+ */
+
+
+/*
+ * Redefinition of inherited virtual operations
+ */
+
+/*
+ * Dump this AST_PredefinedType node to the ostream o
+ */
+void
+AST_PredefinedType::dump(ostream &o)
+{
+  AST_Decl::dump(o);
+}
+
+/*
+ * Data accessors
+ */
+
+const AST_PredefinedType::PredefinedType
+AST_PredefinedType::pt()
+{
+  return pd_pt;
+}
+
+// Narrowing
+IMPL_NARROW_METHODS1(AST_PredefinedType, AST_ConcreteType)
+IMPL_NARROW_FROM_DECL(AST_PredefinedType)
diff --git a/src/xlat-idl/ast_predefined_type.hh b/src/xlat-idl/ast_predefined_type.hh
new file mode 100644 (file)
index 0000000..f3515ec
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+
+COPYRIGHT
+
+Copyright 1992, 1993, 1994 Sun Microsystems, Inc.  Printed in the United
+States of America.  All Rights Reserved.
+
+This product is protected by copyright and distributed under the following
+license restricting its use.
+
+The Interface Definition Language Compiler Front End (CFE) is made
+available for your use provided that you include this license and copyright
+notice on all media and documentation and the software program in which
+this product is incorporated in whole or part. You may copy and extend
+functionality (but may not remove functionality) of the Interface
+Definition Language CFE without charge, but you are not authorized to
+license or distribute it to anyone else except as part of a product or
+program developed by you or with the express written consent of Sun
+Microsystems, Inc. ("Sun").
+
+The names of Sun Microsystems, Inc. and any of its subsidiaries or
+affiliates may not be used in advertising or publicity pertaining to
+distribution of Interface Definition Language CFE as permitted herein.
+
+This license is effective until terminated by Sun for failure to comply
+with this license.  Upon termination, you shall destroy or return all code
+and documentation for the Interface Definition Language CFE.
+