home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / som / include / scemit.xh < prev    next >
Text File  |  1999-02-22  |  69KB  |  2,228 lines

  1.  
  2. /*
  3.  * This file was generated by the SOM Compiler.
  4.  * FileName: scemit.xh.
  5.  * Generated using:
  6.  *     SOM Precompiler somipc: 2.29.1.17
  7.  *     SOM Emitter emitxh: 2.47
  8.  */
  9.  
  10. /*
  11.  *   COMPONENT_NAME: some
  12.  * 
  13.  *   ORIGINS: 27
  14.  * 
  15.  * 
  16.  *    25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,1994,1996
  17.  *   All Rights Reserved
  18.  *   Licensed Materials - Property of IBM
  19.  *   US Government Users Restricted Rights - Use, duplication or
  20.  *   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  21.  *  @(#) somc/sctypes.h 2.7 12/26/95 16:26:17 [7/30/96 14:46:04]
  22.  * 
  23.  */
  24.  
  25.  
  26. #ifndef SOM_SOMTEmitC_xh
  27. #define SOM_SOMTEmitC_xh
  28.  
  29. class SOMTEmitC;
  30.  
  31. /*
  32.  *  This is the pluggable unit in the SOM emitter framework. An emitter
  33.  *  is constructed by subclassing this class and then running the
  34.  *  master emitter program providing the name of the subclass as one of
  35.  *  its command line arguments.
  36.  *  The concepts of this class are simple:
  37.  * 
  38.  *    Emitters always consist of a set of sections
  39.  *    The sections are in a particular order for any particular
  40.  *    emitter, and the order does not vary with the data processed by
  41.  *    the emitter.
  42.  *    A number of the sections of an emitter are common (maybe with
  43.  *    slight variation) across several (or even most) emitters.
  44.  *    There are a number of constructs that occur in varying numbers,
  45.  *    eg, method declarations, data declarations, and attribute
  46.  *    declarations.
  47.  *  Consequently, this class provides methods for:
  48.  *    Methods for many common sections, including several that may be
  49.  *    useful without overridding in several different emitters
  50.  *    Sequencing through the sections of the emitter
  51.  *    Iterating through the constructs that occur in varying numbers
  52.  */
  53.  
  54. #define SOMTEmitC_MajorVersion 2
  55. #define SOMTEmitC_MinorVersion 1
  56.  
  57. /* C++ SOM defs */
  58. #include <somcls.xh>
  59. #include <somcm.xh>
  60.  
  61. /* C++ parent defs */
  62. #ifndef SOM_SOMObject_xh
  63. #include <somobj.xh>
  64. #endif
  65.  
  66. #ifndef SOMTEmitC_API
  67. #define SOMTEmitC_API
  68. /*
  69.  * -- The Class API
  70.  */
  71.  
  72. /*
  73.  * Start of bindings for IDL types
  74.  */
  75.  
  76. class SOMClass;
  77. class SOMObject;
  78. class SOMStringTableC;
  79. class SOMTEntryC;
  80. class SOMTEmitC;
  81. class SOMTMetaClassEntryC;
  82. class SOMTAttributeEntryC;
  83. class SOMTTypedefEntryC;
  84. class SOMTBaseClassEntryC;
  85. class SOMTPassthruEntryC;
  86. class SOMTDataEntryC;
  87. class SOMTMethodEntryC;
  88. class SOMTClassEntryC;
  89. class SOMTModuleEntryC;
  90. class SOMTParameterEntryC;
  91. class SOMTStructEntryC;
  92. class SOMTUnionEntryC;
  93. class SOMTEnumEntryC;
  94. class SOMTConstEntryC;
  95. class SOMTSequenceEntryC;
  96. class SOMTStringEntryC;
  97. class SOMTEnumNameEntryC;
  98. class SOMTCommonEntryC;
  99. class SOMTUserDefinedTypeEntryC;
  100.  
  101. /*
  102.  * End of bindings for IDL types.
  103.  */
  104.  
  105. /*
  106.  * Passthru lines: File: "C.xh", "after"
  107.  */
  108. #include <sctypes.h>
  109. #include <sctmplt.xh>
  110. #include <scclass.xh>
  111. #include <scmeta.xh>
  112. #include <scmethod.xh>
  113. #include <scpass.xh>
  114.     /*
  115.      * These macros provide short-hands for the use of the Scan
  116.      * Methods.
  117.      */
  118.  
  119.     #define SCAN_NOFILTER(scan,method) \
  120.         _##scan(somSelf, #method"Prolog", #method, #method"Epilog")
  121.     #define SCAN_NOFILTER_SN(scan,method,base,newbase) \
  122.         {_somtSetSymbolCopyBoth(_t, #base"PrologSN", #newbase"PrologS"); \
  123.         _somtSetSymbolCopyBoth(_t, #base"SN", #newbase"S"); \
  124.         _somtSetSymbolCopyBoth(_t, #base"EpilogSN", #newbase"EpilogS"); \
  125.         _##scan(somSelf, #method"Prolog", #method, #method"Epilog");}
  126.     #define SCAN_FILTER(scan,filt,method) \
  127.         _##scan(somSelf, #filt, #method"Prolog", #method, #method"Epilog",0)
  128.     #define SCAN_FILTER_SN(scan,filt,method,base,newbase) \
  129.         {_somtSetSymbolCopyBoth(_t, #base"PrologSN", #newbase"PrologS"); \
  130.         _somtSetSymbolCopyBoth(_t, #base"SN", #newbase"S"); \
  131.         _somtSetSymbolCopyBoth(_t, #base"EpilogSN", #newbase"EpilogS"); \
  132.         _##scan(somSelf, #filt, #method"Prolog", #method, #method"Epilog",0);}
  133.  
  134. /* A procedure to create the SOMTEmitC Class */
  135. SOMEXTERN SOMClass * SOMLINK SOMTEmitCNewClass(
  136.         integer4 majorVersion,
  137.         integer4 minorVersion);
  138.  
  139. /* The API to the SOMTEmitC class object, and the methods it introduces. */
  140. SOMEXTERN struct SOMTEmitCClassDataStructure {
  141.     SOMClass *classObject;
  142.     somMToken _get_somtTemplate;
  143.     somMToken _get_somtTargetFile;
  144.     somMToken _set_somtTargetFile;
  145.     somMToken _get_somtTargetClass;
  146.     somMToken _set_somtTargetClass;
  147.     somMToken _get_somtTargetModule;
  148.     somMToken _set_somtTargetModule;
  149.     somMToken _get_somtTargetType;
  150.     somMToken _set_somtTargetType;
  151.     somMToken somtGenerateSections;
  152.     somMToken somtOpenSymbolsFile;
  153.     somMToken somtSetPredefinedSymbols;
  154.     somMToken somtFileSymbols;
  155.     somMToken somtEmitProlog;
  156.     somMToken somtEmitBaseIncludesProlog;
  157.     somMToken somtEmitBaseIncludes;
  158.     somMToken somtEmitBaseIncludesEpilog;
  159.     somMToken somtEmitMetaInclude;
  160.     somMToken somtEmitClass;
  161.     somMToken somtEmitMeta;
  162.     somMToken somtEmitBaseProlog;
  163.     somMToken somtEmitBase;
  164.     somMToken somtEmitBaseEpilog;
  165.     somMToken somtEmitPassthruProlog;
  166.     somMToken somtEmitPassthru;
  167.     somMToken somtEmitPassthruEpilog;
  168.     somMToken somtEmitRelease;
  169.     somMToken somtEmitDataProlog;
  170.     somMToken somtEmitData;
  171.     somMToken somtEmitDataEpilog;
  172.     somMToken somtEmitMethodsProlog;
  173.     somMToken somtEmitMethods;
  174.     somMToken somtEmitMethodsEpilog;
  175.     somMToken somtEmitMethod;
  176.     somMToken somtEmitEpilog;
  177.     somMToken somtScanBases;
  178.     somMToken somtScanConstants;
  179.     somMToken somtCheckVisibility;
  180.     somMToken somtNew;
  181.     somMToken somtImplemented;
  182.     somMToken somtOverridden;
  183.     somMToken somtInherited;
  184.     somMToken somtAllVisible;
  185.     somMToken somtAll;
  186.     somMToken somtNewNoProc;
  187.     somMToken somtPrivOrPub;
  188.     somMToken somtNewProc;
  189.     somMToken somtLink;
  190.     somMToken somtVA;
  191.     somMToken somtScanMethods;
  192.     somMToken somtScanData;
  193.     somMToken somtScanPassthru;
  194.     somMToken somtEmitFullPassthru;
  195.     somMToken somtScanDataF;
  196.     somMToken somtScanBasesF;
  197.     somMToken _set_somtTemplate;
  198.     somMToken _set_somtEmitterName;
  199.     somMToken _get_somtEmitterName;
  200.     somMToken somtEmitAttributeProlog;
  201.     somMToken somtEmitAttribute;
  202.     somMToken somtEmitAttributeEpilog;
  203.     somMToken somtEmitConstantProlog;
  204.     somMToken somtEmitConstant;
  205.     somMToken somtEmitConstantEpilog;
  206.     somMToken somtEmitTypedefProlog;
  207.     somMToken somtEmitTypedef;
  208.     somMToken somtEmitTypedefEpilog;
  209.     somMToken somtEmitStructProlog;
  210.     somMToken somtEmitStruct;
  211.     somMToken somtEmitStructEpilog;
  212.     somMToken somtEmitUnionProlog;
  213.     somMToken somtEmitUnion;
  214.     somMToken somtEmitUnionEpilog;
  215.     somMToken somtEmitEnumProlog;
  216.     somMToken somtEmitEnum;
  217.     somMToken somtEmitEnumEpilog;
  218.     somMToken somtEmitInterfaceProlog;
  219.     somMToken somtEmitInterface;
  220.     somMToken somtEmitInterfaceEpilog;
  221.     somMToken somtEmitModuleProlog;
  222.     somMToken somtEmitModule;
  223.     somMToken somtEmitModuleEpilog;
  224.     somMToken somtScanAttributes;
  225.     somMToken somtScanTypedefs;
  226.     somMToken somtScanStructs;
  227.     somMToken somtScanUnions;
  228.     somMToken somtScanEnums;
  229.     somMToken somtScanInterfaces;
  230.     somMToken somtScanModules;
  231.     somMToken somtGetGlobalModifierValue;
  232.     somMToken somtGetFirstGlobalDefinition;
  233.     somMToken somtGetNextGlobalDefinition;
  234. } SOMDLINK SOMTEmitCClassData;
  235. #define _SOMTEmitC SOMTEmitCClassData.classObject
  236.  
  237. /* The API to parentMtabs for SOMTEmitC, and the instance data it introduces. */
  238. SOMEXTERN struct SOMTEmitCCClassDataStructure {
  239.     somMethodTabs parentMtab;
  240.     somDToken              instanceDataToken;
  241. } SOMDLINK SOMTEmitCCClassData;
  242.  
  243. /*
  244.  * -- Typedefs for SOMTEmitC Method Procedures
  245.  */
  246. SOMEXTERN {
  247. typedef SOMTTemplateOutputC*   SOMLINK somTP_SOMTEmitC__get_somtTemplate(SOMTEmitC *somSelf);
  248. typedef somTP_SOMTEmitC__get_somtTemplate *somTD_SOMTEmitC__get_somtTemplate;
  249. typedef void   SOMLINK somTP_SOMTEmitC__set_somtTemplate(SOMTEmitC *somSelf, 
  250.         SOMTTemplateOutputC* somtTemplate);
  251. typedef somTP_SOMTEmitC__set_somtTemplate *somTD_SOMTEmitC__set_somtTemplate;
  252. typedef FILE*   SOMLINK somTP_SOMTEmitC__get_somtTargetFile(SOMTEmitC *somSelf);
  253. typedef somTP_SOMTEmitC__get_somtTargetFile *somTD_SOMTEmitC__get_somtTargetFile;
  254. typedef void   SOMLINK somTP_SOMTEmitC__set_somtTargetFile(SOMTEmitC *somSelf, 
  255.         FILE* somtTargetFile);
  256. typedef somTP_SOMTEmitC__set_somtTargetFile *somTD_SOMTEmitC__set_somtTargetFile;
  257. typedef SOMTClassEntryC*   SOMLINK somTP_SOMTEmitC__get_somtTargetClass(SOMTEmitC *somSelf);
  258. typedef somTP_SOMTEmitC__get_somtTargetClass *somTD_SOMTEmitC__get_somtTargetClass;
  259. typedef void   SOMLINK somTP_SOMTEmitC__set_somtTargetClass(SOMTEmitC *somSelf, 
  260.         SOMTClassEntryC* somtTargetClass);
  261. typedef somTP_SOMTEmitC__set_somtTargetClass *somTD_SOMTEmitC__set_somtTargetClass;
  262. typedef SOMTModuleEntryC*   SOMLINK somTP_SOMTEmitC__get_somtTargetModule(SOMTEmitC *somSelf);
  263. typedef somTP_SOMTEmitC__get_somtTargetModule *somTD_SOMTEmitC__get_somtTargetModule;
  264. typedef void   SOMLINK somTP_SOMTEmitC__set_somtTargetModule(SOMTEmitC *somSelf, 
  265.         SOMTModuleEntryC* somtTargetModule);
  266. typedef somTP_SOMTEmitC__set_somtTargetModule *somTD_SOMTEmitC__set_somtTargetModule;
  267. typedef SOMTTargetTypeT   SOMLINK somTP_SOMTEmitC__get_somtTargetType(SOMTEmitC *somSelf);
  268. typedef somTP_SOMTEmitC__get_somtTargetType *somTD_SOMTEmitC__get_somtTargetType;
  269. typedef void   SOMLINK somTP_SOMTEmitC__set_somtTargetType(SOMTEmitC *somSelf, 
  270.         SOMTTargetTypeT somtTargetType);
  271. typedef somTP_SOMTEmitC__set_somtTargetType *somTD_SOMTEmitC__set_somtTargetType;
  272. typedef string   SOMLINK somTP_SOMTEmitC__get_somtEmitterName(SOMTEmitC *somSelf);
  273. typedef somTP_SOMTEmitC__get_somtEmitterName *somTD_SOMTEmitC__get_somtEmitterName;
  274. typedef void   SOMLINK somTP_SOMTEmitC__set_somtEmitterName(SOMTEmitC *somSelf, 
  275.         string somtEmitterName);
  276. typedef somTP_SOMTEmitC__set_somtEmitterName *somTD_SOMTEmitC__set_somtEmitterName;
  277. typedef boolean   SOMLINK somTP_SOMTEmitC_somtGenerateSections(SOMTEmitC *somSelf);
  278. typedef somTP_SOMTEmitC_somtGenerateSections *somTD_SOMTEmitC_somtGenerateSections;
  279. typedef FILE*   SOMLINK somTP_SOMTEmitC_somtOpenSymbolsFile(SOMTEmitC *somSelf, 
  280.         string file, 
  281.         string mode);
  282. typedef somTP_SOMTEmitC_somtOpenSymbolsFile *somTD_SOMTEmitC_somtOpenSymbolsFile;
  283. typedef void   SOMLINK somTP_SOMTEmitC_somtSetPredefinedSymbols(SOMTEmitC *somSelf);
  284. typedef somTP_SOMTEmitC_somtSetPredefinedSymbols *somTD_SOMTEmitC_somtSetPredefinedSymbols;
  285. typedef void   SOMLINK somTP_SOMTEmitC_somtFileSymbols(SOMTEmitC *somSelf);
  286. typedef somTP_SOMTEmitC_somtFileSymbols *somTD_SOMTEmitC_somtFileSymbols;
  287. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitProlog(SOMTEmitC *somSelf);
  288. typedef somTP_SOMTEmitC_somtEmitProlog *somTD_SOMTEmitC_somtEmitProlog;
  289. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitBaseIncludesProlog(SOMTEmitC *somSelf);
  290. typedef somTP_SOMTEmitC_somtEmitBaseIncludesProlog *somTD_SOMTEmitC_somtEmitBaseIncludesProlog;
  291. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitBaseIncludes(SOMTEmitC *somSelf, 
  292.         SOMTBaseClassEntryC* base);
  293. typedef somTP_SOMTEmitC_somtEmitBaseIncludes *somTD_SOMTEmitC_somtEmitBaseIncludes;
  294. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitBaseIncludesEpilog(SOMTEmitC *somSelf);
  295. typedef somTP_SOMTEmitC_somtEmitBaseIncludesEpilog *somTD_SOMTEmitC_somtEmitBaseIncludesEpilog;
  296. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitMetaInclude(SOMTEmitC *somSelf);
  297. typedef somTP_SOMTEmitC_somtEmitMetaInclude *somTD_SOMTEmitC_somtEmitMetaInclude;
  298. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitClass(SOMTEmitC *somSelf);
  299. typedef somTP_SOMTEmitC_somtEmitClass *somTD_SOMTEmitC_somtEmitClass;
  300. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitMeta(SOMTEmitC *somSelf);
  301. typedef somTP_SOMTEmitC_somtEmitMeta *somTD_SOMTEmitC_somtEmitMeta;
  302. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitBaseProlog(SOMTEmitC *somSelf);
  303. typedef somTP_SOMTEmitC_somtEmitBaseProlog *somTD_SOMTEmitC_somtEmitBaseProlog;
  304. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitBase(SOMTEmitC *somSelf, 
  305.         SOMTBaseClassEntryC* base);
  306. typedef somTP_SOMTEmitC_somtEmitBase *somTD_SOMTEmitC_somtEmitBase;
  307. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitBaseEpilog(SOMTEmitC *somSelf);
  308. typedef somTP_SOMTEmitC_somtEmitBaseEpilog *somTD_SOMTEmitC_somtEmitBaseEpilog;
  309. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitPassthruProlog(SOMTEmitC *somSelf);
  310. typedef somTP_SOMTEmitC_somtEmitPassthruProlog *somTD_SOMTEmitC_somtEmitPassthruProlog;
  311. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitPassthru(SOMTEmitC *somSelf, 
  312.         SOMTPassthruEntryC* entry);
  313. typedef somTP_SOMTEmitC_somtEmitPassthru *somTD_SOMTEmitC_somtEmitPassthru;
  314. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitPassthruEpilog(SOMTEmitC *somSelf);
  315. typedef somTP_SOMTEmitC_somtEmitPassthruEpilog *somTD_SOMTEmitC_somtEmitPassthruEpilog;
  316. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitRelease(SOMTEmitC *somSelf);
  317. typedef somTP_SOMTEmitC_somtEmitRelease *somTD_SOMTEmitC_somtEmitRelease;
  318. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitDataProlog(SOMTEmitC *somSelf);
  319. typedef somTP_SOMTEmitC_somtEmitDataProlog *somTD_SOMTEmitC_somtEmitDataProlog;
  320. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitData(SOMTEmitC *somSelf, 
  321.         SOMTDataEntryC* entry);
  322. typedef somTP_SOMTEmitC_somtEmitData *somTD_SOMTEmitC_somtEmitData;
  323. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitDataEpilog(SOMTEmitC *somSelf);
  324. typedef somTP_SOMTEmitC_somtEmitDataEpilog *somTD_SOMTEmitC_somtEmitDataEpilog;
  325. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitAttributeProlog(SOMTEmitC *somSelf);
  326. typedef somTP_SOMTEmitC_somtEmitAttributeProlog *somTD_SOMTEmitC_somtEmitAttributeProlog;
  327. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitAttribute(SOMTEmitC *somSelf, 
  328.         SOMTAttributeEntryC* att);
  329. typedef somTP_SOMTEmitC_somtEmitAttribute *somTD_SOMTEmitC_somtEmitAttribute;
  330. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitAttributeEpilog(SOMTEmitC *somSelf);
  331. typedef somTP_SOMTEmitC_somtEmitAttributeEpilog *somTD_SOMTEmitC_somtEmitAttributeEpilog;
  332. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitConstantProlog(SOMTEmitC *somSelf);
  333. typedef somTP_SOMTEmitC_somtEmitConstantProlog *somTD_SOMTEmitC_somtEmitConstantProlog;
  334. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitConstant(SOMTEmitC *somSelf, 
  335.         SOMTConstEntryC* con);
  336. typedef somTP_SOMTEmitC_somtEmitConstant *somTD_SOMTEmitC_somtEmitConstant;
  337. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitConstantEpilog(SOMTEmitC *somSelf);
  338. typedef somTP_SOMTEmitC_somtEmitConstantEpilog *somTD_SOMTEmitC_somtEmitConstantEpilog;
  339. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitTypedefProlog(SOMTEmitC *somSelf);
  340. typedef somTP_SOMTEmitC_somtEmitTypedefProlog *somTD_SOMTEmitC_somtEmitTypedefProlog;
  341. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitTypedef(SOMTEmitC *somSelf, 
  342.         SOMTTypedefEntryC* td);
  343. typedef somTP_SOMTEmitC_somtEmitTypedef *somTD_SOMTEmitC_somtEmitTypedef;
  344. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitTypedefEpilog(SOMTEmitC *somSelf);
  345. typedef somTP_SOMTEmitC_somtEmitTypedefEpilog *somTD_SOMTEmitC_somtEmitTypedefEpilog;
  346. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitStructProlog(SOMTEmitC *somSelf);
  347. typedef somTP_SOMTEmitC_somtEmitStructProlog *somTD_SOMTEmitC_somtEmitStructProlog;
  348. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitStruct(SOMTEmitC *somSelf, 
  349.         SOMTStructEntryC* struc);
  350. typedef somTP_SOMTEmitC_somtEmitStruct *somTD_SOMTEmitC_somtEmitStruct;
  351. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitStructEpilog(SOMTEmitC *somSelf);
  352. typedef somTP_SOMTEmitC_somtEmitStructEpilog *somTD_SOMTEmitC_somtEmitStructEpilog;
  353. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitUnionProlog(SOMTEmitC *somSelf);
  354. typedef somTP_SOMTEmitC_somtEmitUnionProlog *somTD_SOMTEmitC_somtEmitUnionProlog;
  355. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitUnion(SOMTEmitC *somSelf, 
  356.         SOMTUnionEntryC* un);
  357. typedef somTP_SOMTEmitC_somtEmitUnion *somTD_SOMTEmitC_somtEmitUnion;
  358. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitUnionEpilog(SOMTEmitC *somSelf);
  359. typedef somTP_SOMTEmitC_somtEmitUnionEpilog *somTD_SOMTEmitC_somtEmitUnionEpilog;
  360. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitEnumProlog(SOMTEmitC *somSelf);
  361. typedef somTP_SOMTEmitC_somtEmitEnumProlog *somTD_SOMTEmitC_somtEmitEnumProlog;
  362. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitEnum(SOMTEmitC *somSelf, 
  363.         SOMTEnumEntryC* en);
  364. typedef somTP_SOMTEmitC_somtEmitEnum *somTD_SOMTEmitC_somtEmitEnum;
  365. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitEnumEpilog(SOMTEmitC *somSelf);
  366. typedef somTP_SOMTEmitC_somtEmitEnumEpilog *somTD_SOMTEmitC_somtEmitEnumEpilog;
  367. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitInterfaceProlog(SOMTEmitC *somSelf);
  368. typedef somTP_SOMTEmitC_somtEmitInterfaceProlog *somTD_SOMTEmitC_somtEmitInterfaceProlog;
  369. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitInterface(SOMTEmitC *somSelf, 
  370.         SOMTClassEntryC* intfc);
  371. typedef somTP_SOMTEmitC_somtEmitInterface *somTD_SOMTEmitC_somtEmitInterface;
  372. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitInterfaceEpilog(SOMTEmitC *somSelf);
  373. typedef somTP_SOMTEmitC_somtEmitInterfaceEpilog *somTD_SOMTEmitC_somtEmitInterfaceEpilog;
  374. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitModuleProlog(SOMTEmitC *somSelf);
  375. typedef somTP_SOMTEmitC_somtEmitModuleProlog *somTD_SOMTEmitC_somtEmitModuleProlog;
  376. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitModule(SOMTEmitC *somSelf, 
  377.         SOMTModuleEntryC* mod);
  378. typedef somTP_SOMTEmitC_somtEmitModule *somTD_SOMTEmitC_somtEmitModule;
  379. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitModuleEpilog(SOMTEmitC *somSelf);
  380. typedef somTP_SOMTEmitC_somtEmitModuleEpilog *somTD_SOMTEmitC_somtEmitModuleEpilog;
  381. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitMethodsProlog(SOMTEmitC *somSelf);
  382. typedef somTP_SOMTEmitC_somtEmitMethodsProlog *somTD_SOMTEmitC_somtEmitMethodsProlog;
  383. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitMethods(SOMTEmitC *somSelf, 
  384.         SOMTMethodEntryC* method);
  385. typedef somTP_SOMTEmitC_somtEmitMethods *somTD_SOMTEmitC_somtEmitMethods;
  386. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitMethodsEpilog(SOMTEmitC *somSelf);
  387. typedef somTP_SOMTEmitC_somtEmitMethodsEpilog *somTD_SOMTEmitC_somtEmitMethodsEpilog;
  388. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitMethod(SOMTEmitC *somSelf, 
  389.         SOMTMethodEntryC* entry);
  390. typedef somTP_SOMTEmitC_somtEmitMethod *somTD_SOMTEmitC_somtEmitMethod;
  391. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitEpilog(SOMTEmitC *somSelf);
  392. typedef somTP_SOMTEmitC_somtEmitEpilog *somTD_SOMTEmitC_somtEmitEpilog;
  393. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanBases(SOMTEmitC *somSelf, 
  394.         string prolog, 
  395.         string each, 
  396.         string epilog);
  397. typedef somTP_SOMTEmitC_somtScanBases *somTD_SOMTEmitC_somtScanBases;
  398. typedef boolean   SOMLINK somTP_SOMTEmitC_somtCheckVisibility(SOMTEmitC *somSelf, 
  399.         SOMTMethodEntryC* entry);
  400. typedef somTP_SOMTEmitC_somtCheckVisibility *somTD_SOMTEmitC_somtCheckVisibility;
  401. typedef boolean   SOMLINK somTP_SOMTEmitC_somtNew(SOMTEmitC *somSelf, 
  402.         SOMTMethodEntryC* entry);
  403. typedef somTP_SOMTEmitC_somtNew *somTD_SOMTEmitC_somtNew;
  404. typedef boolean   SOMLINK somTP_SOMTEmitC_somtImplemented(SOMTEmitC *somSelf, 
  405.         SOMTMethodEntryC* entry);
  406. typedef somTP_SOMTEmitC_somtImplemented *somTD_SOMTEmitC_somtImplemented;
  407. typedef boolean   SOMLINK somTP_SOMTEmitC_somtOverridden(SOMTEmitC *somSelf, 
  408.         SOMTMethodEntryC* entry);
  409. typedef somTP_SOMTEmitC_somtOverridden *somTD_SOMTEmitC_somtOverridden;
  410. typedef boolean   SOMLINK somTP_SOMTEmitC_somtInherited(SOMTEmitC *somSelf, 
  411.         SOMTMethodEntryC* entry);
  412. typedef somTP_SOMTEmitC_somtInherited *somTD_SOMTEmitC_somtInherited;
  413. typedef boolean   SOMLINK somTP_SOMTEmitC_somtAllVisible(SOMTEmitC *somSelf, 
  414.         SOMTMethodEntryC* entry);
  415. typedef somTP_SOMTEmitC_somtAllVisible *somTD_SOMTEmitC_somtAllVisible;
  416. typedef boolean   SOMLINK somTP_SOMTEmitC_somtAll(SOMTEmitC *somSelf, 
  417.         SOMTMethodEntryC* entry);
  418. typedef somTP_SOMTEmitC_somtAll *somTD_SOMTEmitC_somtAll;
  419. typedef boolean   SOMLINK somTP_SOMTEmitC_somtNewNoProc(SOMTEmitC *somSelf, 
  420.         SOMTEntryC* entry);
  421. typedef somTP_SOMTEmitC_somtNewNoProc *somTD_SOMTEmitC_somtNewNoProc;
  422. typedef boolean   SOMLINK somTP_SOMTEmitC_somtPrivOrPub(SOMTEmitC *somSelf, 
  423.         SOMTEntryC* entry);
  424. typedef somTP_SOMTEmitC_somtPrivOrPub *somTD_SOMTEmitC_somtPrivOrPub;
  425. typedef boolean   SOMLINK somTP_SOMTEmitC_somtNewProc(SOMTEmitC *somSelf, 
  426.         SOMTEntryC* entry);
  427. typedef somTP_SOMTEmitC_somtNewProc *somTD_SOMTEmitC_somtNewProc;
  428. typedef boolean   SOMLINK somTP_SOMTEmitC_somtLink(SOMTEmitC *somSelf, 
  429.         SOMTEntryC* entry);
  430. typedef somTP_SOMTEmitC_somtLink *somTD_SOMTEmitC_somtLink;
  431. typedef boolean   SOMLINK somTP_SOMTEmitC_somtVA(SOMTEmitC *somSelf, 
  432.         SOMTEntryC* entry);
  433. typedef somTP_SOMTEmitC_somtVA *somTD_SOMTEmitC_somtVA;
  434. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanMethods(SOMTEmitC *somSelf, 
  435.         string filter, 
  436.         string prolog, 
  437.         string each, 
  438.         string epilog, 
  439.         boolean forceProlog);
  440. typedef somTP_SOMTEmitC_somtScanMethods *somTD_SOMTEmitC_somtScanMethods;
  441. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanConstants(SOMTEmitC *somSelf, 
  442.         string prolog, 
  443.         string each, 
  444.         string epilog);
  445. typedef somTP_SOMTEmitC_somtScanConstants *somTD_SOMTEmitC_somtScanConstants;
  446. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanTypedefs(SOMTEmitC *somSelf, 
  447.         string prolog, 
  448.         string each, 
  449.         string epilog);
  450. typedef somTP_SOMTEmitC_somtScanTypedefs *somTD_SOMTEmitC_somtScanTypedefs;
  451. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanStructs(SOMTEmitC *somSelf, 
  452.         string prolog, 
  453.         string each, 
  454.         string epilog);
  455. typedef somTP_SOMTEmitC_somtScanStructs *somTD_SOMTEmitC_somtScanStructs;
  456. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanUnions(SOMTEmitC *somSelf, 
  457.         string prolog, 
  458.         string each, 
  459.         string epilog);
  460. typedef somTP_SOMTEmitC_somtScanUnions *somTD_SOMTEmitC_somtScanUnions;
  461. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanEnums(SOMTEmitC *somSelf, 
  462.         string prolog, 
  463.         string each, 
  464.         string epilog);
  465. typedef somTP_SOMTEmitC_somtScanEnums *somTD_SOMTEmitC_somtScanEnums;
  466. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanData(SOMTEmitC *somSelf, 
  467.         string prolog, 
  468.         string each, 
  469.         string epilog);
  470. typedef somTP_SOMTEmitC_somtScanData *somTD_SOMTEmitC_somtScanData;
  471. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanAttributes(SOMTEmitC *somSelf, 
  472.         string prolog, 
  473.         string each, 
  474.         string epilog);
  475. typedef somTP_SOMTEmitC_somtScanAttributes *somTD_SOMTEmitC_somtScanAttributes;
  476. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanInterfaces(SOMTEmitC *somSelf, 
  477.         string prolog, 
  478.         string each, 
  479.         string epilog);
  480. typedef somTP_SOMTEmitC_somtScanInterfaces *somTD_SOMTEmitC_somtScanInterfaces;
  481. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanModules(SOMTEmitC *somSelf, 
  482.         string prolog, 
  483.         string each, 
  484.         string epilog);
  485. typedef somTP_SOMTEmitC_somtScanModules *somTD_SOMTEmitC_somtScanModules;
  486. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanPassthru(SOMTEmitC *somSelf, 
  487.         boolean before, 
  488.         string prolog, 
  489.         string each, 
  490.         string epilog);
  491. typedef somTP_SOMTEmitC_somtScanPassthru *somTD_SOMTEmitC_somtScanPassthru;
  492. typedef void   SOMLINK somTP_SOMTEmitC_somtEmitFullPassthru(SOMTEmitC *somSelf, 
  493.         boolean before, 
  494.         string language);
  495. typedef somTP_SOMTEmitC_somtEmitFullPassthru *somTD_SOMTEmitC_somtEmitFullPassthru;
  496. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanDataF(SOMTEmitC *somSelf, 
  497.         string filter, 
  498.         string prolog, 
  499.         string each, 
  500.         string epilog, 
  501.         boolean forceProlog);
  502. typedef somTP_SOMTEmitC_somtScanDataF *somTD_SOMTEmitC_somtScanDataF;
  503. typedef boolean   SOMLINK somTP_SOMTEmitC_somtScanBasesF(SOMTEmitC *somSelf, 
  504.         string filter, 
  505.         string prolog, 
  506.         string each, 
  507.         string epilog, 
  508.         boolean forceProlog);
  509. typedef somTP_SOMTEmitC_somtScanBasesF *somTD_SOMTEmitC_somtScanBasesF;
  510. typedef string   SOMLINK somTP_SOMTEmitC_somtGetGlobalModifierValue(SOMTEmitC *somSelf, 
  511.         string modifierName);
  512. typedef somTP_SOMTEmitC_somtGetGlobalModifierValue *somTD_SOMTEmitC_somtGetGlobalModifierValue;
  513. typedef SOMTEntryC*   SOMLINK somTP_SOMTEmitC_somtGetFirstGlobalDefinition(SOMTEmitC *somSelf);
  514. typedef somTP_SOMTEmitC_somtGetFirstGlobalDefinition *somTD_SOMTEmitC_somtGetFirstGlobalDefinition;
  515. typedef SOMTEntryC*   SOMLINK somTP_SOMTEmitC_somtGetNextGlobalDefinition(SOMTEmitC *somSelf);
  516. typedef somTP_SOMTEmitC_somtGetNextGlobalDefinition *somTD_SOMTEmitC_somtGetNextGlobalDefinition;
  517.  
  518. /*
  519.  * -- Typedefs for Reintroduced Wrapper Methods
  520.  */
  521. typedef void   SOMLINK somTP_SOMTEmitC_somDefaultInit(SOMTEmitC *somSelf, 
  522.         som3InitCtrl* ctrl);
  523. typedef somTP_SOMTEmitC_somDefaultInit *somTD_SOMTEmitC_somDefaultInit;
  524. typedef void   SOMLINK somTP_SOMTEmitC_somDestruct(SOMTEmitC *somSelf, 
  525.         octet doFree, 
  526.         som3DestructCtrl* ctrl);
  527. typedef somTP_SOMTEmitC_somDestruct *somTD_SOMTEmitC_somDestruct;
  528. typedef void   SOMLINK somTP_SOMTEmitC_somDefaultCopyInit(SOMTEmitC *somSelf, 
  529.         som3InitCtrl* ctrl, 
  530.         SOMObject* fromObj);
  531. typedef somTP_SOMTEmitC_somDefaultCopyInit *somTD_SOMTEmitC_somDefaultCopyInit;
  532. typedef SOMTEmitC*   SOMLINK somTP_SOMTEmitC_somDefaultAssign(SOMTEmitC *somSelf, 
  533.         som3AssignCtrl* ctrl, 
  534.         SOMObject* fromObj);
  535. typedef somTP_SOMTEmitC_somDefaultAssign *somTD_SOMTEmitC_somDefaultAssign;
  536. typedef void   SOMLINK somTP_SOMTEmitC_somDefaultConstCopyInit(SOMTEmitC *somSelf, 
  537.         som3InitCtrl* ctrl, 
  538.         SOMObject* fromObj);
  539. typedef somTP_SOMTEmitC_somDefaultConstCopyInit *somTD_SOMTEmitC_somDefaultConstCopyInit;
  540. typedef void   SOMLINK somTP_SOMTEmitC_somDefaultVCopyInit(SOMTEmitC *somSelf, 
  541.         som3InitCtrl* ctrl, 
  542.         SOMObject* fromObj);
  543. typedef somTP_SOMTEmitC_somDefaultVCopyInit *somTD_SOMTEmitC_somDefaultVCopyInit;
  544. typedef void   SOMLINK somTP_SOMTEmitC_somDefaultConstVCopyInit(SOMTEmitC *somSelf, 
  545.         som3InitCtrl* ctrl, 
  546.         SOMObject* fromObj);
  547. typedef somTP_SOMTEmitC_somDefaultConstVCopyInit *somTD_SOMTEmitC_somDefaultConstVCopyInit;
  548. typedef SOMTEmitC*   SOMLINK somTP_SOMTEmitC_somDefaultConstAssign(SOMTEmitC *somSelf, 
  549.         som3AssignCtrl* ctrl, 
  550.         SOMObject* fromObj);
  551. typedef somTP_SOMTEmitC_somDefaultConstAssign *somTD_SOMTEmitC_somDefaultConstAssign;
  552. typedef SOMTEmitC*   SOMLINK somTP_SOMTEmitC_somDefaultVAssign(SOMTEmitC *somSelf, 
  553.         som3AssignCtrl* ctrl, 
  554.         SOMObject* fromObj);
  555. typedef somTP_SOMTEmitC_somDefaultVAssign *somTD_SOMTEmitC_somDefaultVAssign;
  556. typedef SOMTEmitC*   SOMLINK somTP_SOMTEmitC_somDefaultConstVAssign(SOMTEmitC *somSelf, 
  557.         som3AssignCtrl* ctrl, 
  558.         SOMObject* fromObj);
  559. typedef somTP_SOMTEmitC_somDefaultConstVAssign *somTD_SOMTEmitC_somDefaultConstVAssign;
  560. typedef void   SOMLINK somTP_SOMTEmitC_somInit(SOMTEmitC *somSelf);
  561. typedef somTP_SOMTEmitC_somInit *somTD_SOMTEmitC_somInit;
  562. typedef void   SOMLINK somTP_SOMTEmitC_somFree(SOMTEmitC *somSelf);
  563. typedef somTP_SOMTEmitC_somFree *somTD_SOMTEmitC_somFree;
  564. typedef void   SOMLINK somTP_SOMTEmitC_somUninit(SOMTEmitC *somSelf);
  565. typedef somTP_SOMTEmitC_somUninit *somTD_SOMTEmitC_somUninit;
  566. typedef SOMClass*   SOMLINK somTP_SOMTEmitC_somGetClass(SOMTEmitC *somSelf);
  567. typedef somTP_SOMTEmitC_somGetClass *somTD_SOMTEmitC_somGetClass;
  568. typedef string   SOMLINK somTP_SOMTEmitC_somGetClassName(SOMTEmitC *somSelf);
  569. typedef somTP_SOMTEmitC_somGetClassName *somTD_SOMTEmitC_somGetClassName;
  570. typedef long   SOMLINK somTP_SOMTEmitC_somGetSize(SOMTEmitC *somSelf);
  571. typedef somTP_SOMTEmitC_somGetSize *somTD_SOMTEmitC_somGetSize;
  572. typedef boolean   SOMLINK somTP_SOMTEmitC_somIsA(SOMTEmitC *somSelf, 
  573.         SOMClass* aClassObj);
  574. typedef somTP_SOMTEmitC_somIsA *somTD_SOMTEmitC_somIsA;
  575. typedef boolean   SOMLINK somTP_SOMTEmitC_somIsInstanceOf(SOMTEmitC *somSelf, 
  576.         SOMClass* aClassObj);
  577. typedef somTP_SOMTEmitC_somIsInstanceOf *somTD_SOMTEmitC_somIsInstanceOf;
  578. typedef boolean   SOMLINK somTP_SOMTEmitC_somRespondsTo(SOMTEmitC *somSelf, 
  579.         somId mId);
  580. typedef somTP_SOMTEmitC_somRespondsTo *somTD_SOMTEmitC_somRespondsTo;
  581. typedef boolean   SOMLINK somTP_SOMTEmitC_somDispatch(SOMTEmitC *somSelf, 
  582.         somToken* retValue, 
  583.         somId methodId, 
  584.         va_list ap);
  585. typedef somTP_SOMTEmitC_somDispatch *somTD_SOMTEmitC_somDispatch;
  586. typedef boolean   SOMLINK somTP_SOMTEmitC_somClassDispatch(SOMTEmitC *somSelf, 
  587.         SOMClass* clsObj, 
  588.         somToken* retValue, 
  589.         somId methodId, 
  590.         va_list ap);
  591. typedef somTP_SOMTEmitC_somClassDispatch *somTD_SOMTEmitC_somClassDispatch;
  592. typedef boolean   SOMLINK somTP_SOMTEmitC_somCastObj(SOMTEmitC *somSelf, 
  593.         SOMClass* cls);
  594. typedef somTP_SOMTEmitC_somCastObj *somTD_SOMTEmitC_somCastObj;
  595. typedef boolean   SOMLINK somTP_SOMTEmitC_somResetObj(SOMTEmitC *somSelf);
  596. typedef somTP_SOMTEmitC_somResetObj *somTD_SOMTEmitC_somResetObj;
  597. typedef void   SOMLINK somTP_SOMTEmitC_somDispatchV(SOMTEmitC *somSelf, 
  598.         somId methodId, 
  599.         somId descriptor, 
  600.         va_list ap);
  601. typedef somTP_SOMTEmitC_somDispatchV *somTD_SOMTEmitC_somDispatchV;
  602. typedef long   SOMLINK somTP_SOMTEmitC_somDispatchL(SOMTEmitC *somSelf, 
  603.         somId methodId, 
  604.         somId descriptor, 
  605.         va_list ap);
  606. typedef somTP_SOMTEmitC_somDispatchL *somTD_SOMTEmitC_somDispatchL;
  607. typedef void*   SOMLINK somTP_SOMTEmitC_somDispatchA(SOMTEmitC *somSelf, 
  608.         somId methodId, 
  609.         somId descriptor, 
  610.         va_list ap);
  611. typedef somTP_SOMTEmitC_somDispatchA *somTD_SOMTEmitC_somDispatchA;
  612. typedef double   SOMLINK somTP_SOMTEmitC_somDispatchD(SOMTEmitC *somSelf, 
  613.         somId methodId, 
  614.         somId descriptor, 
  615.         va_list ap);
  616. typedef somTP_SOMTEmitC_somDispatchD *somTD_SOMTEmitC_somDispatchD;
  617. typedef SOMObject*   SOMLINK somTP_SOMTEmitC_somPrintSelf(SOMTEmitC *somSelf);
  618. typedef somTP_SOMTEmitC_somPrintSelf *somTD_SOMTEmitC_somPrintSelf;
  619. typedef void   SOMLINK somTP_SOMTEmitC_somDumpSelf(SOMTEmitC *somSelf, 
  620.         long level);
  621. typedef somTP_SOMTEmitC_somDumpSelf *somTD_SOMTEmitC_somDumpSelf;
  622. typedef void   SOMLINK somTP_SOMTEmitC_somDumpSelfInt(SOMTEmitC *somSelf, 
  623.         long level);
  624. typedef somTP_SOMTEmitC_somDumpSelfInt *somTD_SOMTEmitC_somDumpSelfInt;
  625. }
  626.  
  627. #endif /* SOMTEmitC_API */
  628.  
  629.  
  630. /*
  631.  * -- This emitter treats Method Tokens as Thunks by default.
  632.  * -- Use the sc modifier "nothunks" to change this default
  633.  */
  634. #undef somresolve_
  635. #define somresolve_(obj,mToken) ((somMethodProc*)((void)obj, mToken))
  636.  
  637. /*
  638.  * -- The C++ Wrapper Class for SOMTEmitC
  639.  */
  640. class SOMTEmitC : public SOMObject
  641. {
  642. /*
  643.  *  This is the pluggable unit in the SOM emitter framework. An emitter
  644.  *  is constructed by subclassing this class and then running the
  645.  *  master emitter program providing the name of the subclass as one of
  646.  *  its command line arguments.
  647.  *  The concepts of this class are simple:
  648.  * 
  649.  *    Emitters always consist of a set of sections
  650.  *    The sections are in a particular order for any particular
  651.  *    emitter, and the order does not vary with the data processed by
  652.  *    the emitter.
  653.  *    A number of the sections of an emitter are common (maybe with
  654.  *    slight variation) across several (or even most) emitters.
  655.  *    There are a number of constructs that occur in varying numbers,
  656.  *    eg, method declarations, data declarations, and attribute
  657.  *    declarations.
  658.  *  Consequently, this class provides methods for:
  659.  *    Methods for many common sections, including several that may be
  660.  *    useful without overridding in several different emitters
  661.  *    Sequencing through the sections of the emitter
  662.  *    Iterating through the constructs that occur in varying numbers
  663.  */
  664. public:
  665.  
  666. // SOMTEmitC::new creates the class object if necessary, and then uses somNewNoInit
  667. // to allocate memory and create the object. Initialization is in ctors.
  668. void *operator new(size_t)
  669. {
  670.    if (!_SOMTEmitC) SOMTEmitCNewClass(SOMTEmitC_MajorVersion,SOMTEmitC_MinorVersion);
  671.    return (void*)
  672.       SOM_Resolve(_SOMTEmitC,SOMClass,somNewNoInit)
  673.          ((SOMClass *)((void*)_SOMTEmitC));
  674. }
  675.  
  676. // SOMTEmitC::delete uses somDestruct.
  677. void operator delete(void * obj)
  678. {
  679.    if (obj && *(void**)obj) {
  680.       SOM_Resolve(obj,SOMObject,somFree)
  681.          ((SOMObject*)obj);
  682.    }
  683. }
  684.  
  685. SOMTEmitC& operator=(SOMTEmitC& fromObj)
  686. {
  687.    this->somDefaultAssign(0,(SOMObject*)((void*)&fromObj));
  688.    return *this;
  689. }
  690.  
  691. SOMTEmitC()
  692. {
  693.    if (*(void**)this != 
  694.        ((somParentMtabStructPtr)
  695.         (SOMTEmitCCClassData.parentMtab))->mtab)
  696.       return;
  697.    ((SOMObject*)((void*)this))->somDefaultInit(0);
  698. }
  699.  
  700. SOMTEmitC(SOMTEmitC* fromObj)
  701. {
  702.    if (*(void**)this != 
  703.        ((somParentMtabStructPtr)
  704.         (SOMTEmitCCClassData.parentMtab))->mtab)
  705.       return;
  706.    ((SOMObject*)((void*)this))->somDefaultCopyInit(0,((SOMObject*)((void*)fromObj)));
  707. }
  708.  
  709. #ifdef __IBMCPP__
  710. #pragma info(nocnv,nopar)
  711. #endif
  712. SOMTEmitC(const SOMTEmitC* fromObj)
  713. {
  714.    if (*(void**)this != 
  715.        ((somParentMtabStructPtr)
  716.         (SOMTEmitCCClassData.parentMtab))->mtab)
  717.       return;
  718.    ((SOMObject*)((void*)this))->somDefaultConstCopyInit(0,((SOMObject*)((void*)fromObj)));
  719. }
  720. #ifdef __IBMCPP__
  721. #pragma info(restore)
  722. #endif
  723.  
  724.  
  725. /* method: _get_somtTemplate */
  726. SOMTTemplateOutputC*   _get_somtTemplate()
  727. {
  728. /*
  729.  *  The template is to provide template output and maintains a symbol
  730.  *  table that provides a sort of global context for the emitter.
  731.  */
  732.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_get_somtTemplate)
  733.     (this);
  734. }
  735.  
  736.  
  737. /* method: _set_somtTemplate */
  738. void   _set_somtTemplate(SOMTTemplateOutputC* somtTemplate)
  739. {
  740. /*
  741.  *  The template is to provide template output and maintains a symbol
  742.  *  table that provides a sort of global context for the emitter.
  743.  */
  744.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_set_somtTemplate)
  745.     (this,somtTemplate);
  746. }
  747.  
  748.  
  749. /* method: _get_somtTargetFile */
  750. FILE*   _get_somtTargetFile()
  751. {
  752. /*
  753.  *  The target file is the one to which all emitter output is to be
  754.  *  directed.
  755.  */
  756.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_get_somtTargetFile)
  757.     (this);
  758. }
  759.  
  760.  
  761. /* method: _set_somtTargetFile */
  762. void   _set_somtTargetFile(FILE* somtTargetFile)
  763. {
  764. /*
  765.  *  The target file is the one to which all emitter output is to be
  766.  *  directed.
  767.  */
  768.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_set_somtTargetFile)
  769.     (this,somtTargetFile);
  770. }
  771.  
  772.  
  773. /* method: _get_somtTargetClass */
  774. SOMTClassEntryC*   _get_somtTargetClass()
  775. {
  776. /*
  777.  *  The target class is the class definition for which code is to be
  778.  *  emitted.
  779.  */
  780.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_get_somtTargetClass)
  781.     (this);
  782. }
  783.  
  784.  
  785. /* method: _set_somtTargetClass */
  786. void   _set_somtTargetClass(SOMTClassEntryC* somtTargetClass)
  787. {
  788. /*
  789.  *  The target class is the class definition for which code is to be
  790.  *  emitted.
  791.  */
  792.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_set_somtTargetClass)
  793.     (this,somtTargetClass);
  794. }
  795.  
  796.  
  797. /* method: _get_somtTargetModule */
  798. SOMTModuleEntryC*   _get_somtTargetModule()
  799. {
  800. /*
  801.  *  The target module is the module definition for which code is to be
  802.  *  emitted.
  803.  */
  804.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_get_somtTargetModule)
  805.     (this);
  806. }
  807.  
  808.  
  809. /* method: _set_somtTargetModule */
  810. void   _set_somtTargetModule(SOMTModuleEntryC* somtTargetModule)
  811. {
  812. /*
  813.  *  The target module is the module definition for which code is to be
  814.  *  emitted.
  815.  */
  816.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_set_somtTargetModule)
  817.     (this,somtTargetModule);
  818. }
  819.  
  820.  
  821. /* method: _get_somtTargetType */
  822. SOMTTargetTypeT   _get_somtTargetType()
  823. {
  824. /*
  825.  *  The target type indicates what type of output file is being
  826.  *  produced, public, private, or implementation.  This allows the
  827.  *  same emitter subclass to produce several different output files
  828.  *  that generally differ only in how much of the class definition
  829.  *  they cover. Eg, .csc, .sc, and .psc.
  830.  *  This is attribute is for OIDL compatibility only.
  831.  */
  832.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_get_somtTargetType)
  833.     (this);
  834. }
  835.  
  836.  
  837. /* method: _set_somtTargetType */
  838. void   _set_somtTargetType(SOMTTargetTypeT somtTargetType)
  839. {
  840. /*
  841.  *  The target type indicates what type of output file is being
  842.  *  produced, public, private, or implementation.  This allows the
  843.  *  same emitter subclass to produce several different output files
  844.  *  that generally differ only in how much of the class definition
  845.  *  they cover. Eg, .csc, .sc, and .psc.
  846.  *  This is attribute is for OIDL compatibility only.
  847.  */
  848.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_set_somtTargetType)
  849.     (this,somtTargetType);
  850. }
  851.  
  852.  
  853. /* method: _get_somtEmitterName */
  854. string   _get_somtEmitterName()
  855. {
  856. /*
  857.  *  The short name of the emitter (the name used to invoke it via the
  858.  *  SOM Compiler.  Typically this is the file stem of the subclass
  859.  *  of SOMTEmitC. This attribute should be set in the driver program
  860.  *  that runs the emitter.  It is used to filter passthrus so that only
  861.  *  passthrus directed to a particular emitter are seen by it.
  862.  */
  863.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_get_somtEmitterName)
  864.     (this);
  865. }
  866.  
  867.  
  868. /* method: _set_somtEmitterName */
  869. void   _set_somtEmitterName(string somtEmitterName)
  870. {
  871. /*
  872.  *  The short name of the emitter (the name used to invoke it via the
  873.  *  SOM Compiler.  Typically this is the file stem of the subclass
  874.  *  of SOMTEmitC. This attribute should be set in the driver program
  875.  *  that runs the emitter.  It is used to filter passthrus so that only
  876.  *  passthrus directed to a particular emitter are seen by it.
  877.  */
  878.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,_set_somtEmitterName)
  879.     (this,somtEmitterName);
  880. }
  881.  
  882.  
  883. /* method: somtGenerateSections */
  884. boolean   somtGenerateSections()
  885. {
  886. /*
  887.  *  Calls each of the section methods in order.  The order is:
  888.  * 
  889.  *    somtEmitProlog
  890.  *    when emitting a class:
  891.  *          somtEmitClass
  892.  *          somtEmitBase
  893.  *          somtEmitMeta
  894.  *    somtEmitConstant
  895.  *    somtEmitTypedef
  896.  *    somtEmitStruct
  897.  *    somtEmitUnion
  898.  *    somtEmitEnum
  899.  *    when emitting a class:
  900.  *       somtEmitAttribute
  901.  *       somtEmitMethod
  902.  *       somtEmitRelease
  903.  *       somtEmitPassthru
  904.  *       somtEmitData
  905.  *    when emitting a module:
  906.  *        somtEmitInterface
  907.  *        somtEmitModule
  908.  *    somtEmitEpilog
  909.  * 
  910.  *  This method will need to be overridden by many emitters in order
  911.  *  to rearange the order of the sections and to add or delete
  912.  *  sections.
  913.  *  Note: repeating sections such as methods, data, and passthru,
  914.  *  have a prolog and epilog method as well. The prolog method is
  915.  *  called before the first sections is processed and the epilog method
  916.  *  is called after the last section is processed.
  917.  */
  918.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtGenerateSections)
  919.     (this);
  920. }
  921.  
  922.  
  923. /* method: somtOpenSymbolsFile */
  924. FILE*   somtOpenSymbolsFile(string file, 
  925.         string mode)
  926. {
  927. /*
  928.  *  This method attempts to open the symbols file.
  929.  *  If file doesn't exist then it will attempt to find it in the
  930.  *  directories specified in the SMINCLUDE environment variable.
  931.  *  If the file can be found a FILE * pointer is returned, otherwise
  932.  *  NULL is returned.
  933.  */
  934.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtOpenSymbolsFile)
  935.     (this,file,mode);
  936. }
  937.  
  938.  
  939. /* method: somtSetPredefinedSymbols */
  940. void   somtSetPredefinedSymbols()
  941. {
  942. /*
  943.  *  Set predefined symbols that are used for such things as section
  944.  *  names etc.
  945.  */
  946.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtSetPredefinedSymbols)
  947.     (this);
  948. }
  949.  
  950.  
  951. /* method: somtFileSymbols */
  952. void   somtFileSymbols()
  953. {
  954. /*
  955.  *  Symbols that are common to the file.  This includes the target
  956.  *  class symbols, and the metaclass symbols, and special symbols
  957.  *  like <timeStamp>.  IE, all symbols that have a single definition.
  958.  */
  959.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtFileSymbols)
  960.     (this);
  961. }
  962.  
  963.  
  964. /* method: somtEmitProlog */
  965. void   somtEmitProlog()
  966. {
  967.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitProlog)
  968.     (this);
  969. }
  970.  
  971.  
  972. /* method: somtEmitBaseIncludesProlog */
  973. void   somtEmitBaseIncludesProlog()
  974. {
  975.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitBaseIncludesProlog)
  976.     (this);
  977. }
  978.  
  979.  
  980. /* method: somtEmitBaseIncludes */
  981. void   somtEmitBaseIncludes(SOMTBaseClassEntryC* base)
  982. {
  983.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitBaseIncludes)
  984.     (this,base);
  985. }
  986.  
  987.  
  988. /* method: somtEmitBaseIncludesEpilog */
  989. void   somtEmitBaseIncludesEpilog()
  990. {
  991.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitBaseIncludesEpilog)
  992.     (this);
  993. }
  994.  
  995.  
  996. /* method: somtEmitMetaInclude */
  997. void   somtEmitMetaInclude()
  998. {
  999.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitMetaInclude)
  1000.     (this);
  1001. }
  1002.  
  1003.  
  1004. /* method: somtEmitClass */
  1005. void   somtEmitClass()
  1006. {
  1007.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitClass)
  1008.     (this);
  1009. }
  1010.  
  1011.  
  1012. /* method: somtEmitMeta */
  1013. void   somtEmitMeta()
  1014. {
  1015.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitMeta)
  1016.     (this);
  1017. }
  1018.  
  1019.  
  1020. /* method: somtEmitBaseProlog */
  1021. void   somtEmitBaseProlog()
  1022. {
  1023.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitBaseProlog)
  1024.     (this);
  1025. }
  1026.  
  1027.  
  1028. /* method: somtEmitBase */
  1029. void   somtEmitBase(SOMTBaseClassEntryC* base)
  1030. {
  1031.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitBase)
  1032.     (this,base);
  1033. }
  1034.  
  1035.  
  1036. /* method: somtEmitBaseEpilog */
  1037. void   somtEmitBaseEpilog()
  1038. {
  1039.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitBaseEpilog)
  1040.     (this);
  1041. }
  1042.  
  1043.  
  1044. /* method: somtEmitPassthruProlog */
  1045. void   somtEmitPassthruProlog()
  1046. {
  1047.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitPassthruProlog)
  1048.     (this);
  1049. }
  1050.  
  1051.  
  1052. /* method: somtEmitPassthru */
  1053. void   somtEmitPassthru(SOMTPassthruEntryC* entry)
  1054. {
  1055.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitPassthru)
  1056.     (this,entry);
  1057. }
  1058.  
  1059.  
  1060. /* method: somtEmitPassthruEpilog */
  1061. void   somtEmitPassthruEpilog()
  1062. {
  1063.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitPassthruEpilog)
  1064.     (this);
  1065. }
  1066.  
  1067.  
  1068. /* method: somtEmitRelease */
  1069. void   somtEmitRelease()
  1070. {
  1071.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitRelease)
  1072.     (this);
  1073. }
  1074.  
  1075.  
  1076. /* method: somtEmitDataProlog */
  1077. void   somtEmitDataProlog()
  1078. {
  1079.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitDataProlog)
  1080.     (this);
  1081. }
  1082.  
  1083.  
  1084. /* method: somtEmitData */
  1085. void   somtEmitData(SOMTDataEntryC* entry)
  1086. {
  1087.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitData)
  1088.     (this,entry);
  1089. }
  1090.  
  1091.  
  1092. /* method: somtEmitDataEpilog */
  1093. void   somtEmitDataEpilog()
  1094. {
  1095.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitDataEpilog)
  1096.     (this);
  1097. }
  1098.  
  1099.  
  1100. /* method: somtEmitAttributeProlog */
  1101. void   somtEmitAttributeProlog()
  1102. {
  1103.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitAttributeProlog)
  1104.     (this);
  1105. }
  1106.  
  1107.  
  1108. /* method: somtEmitAttribute */
  1109. void   somtEmitAttribute(SOMTAttributeEntryC* att)
  1110. {
  1111.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitAttribute)
  1112.     (this,att);
  1113. }
  1114.  
  1115.  
  1116. /* method: somtEmitAttributeEpilog */
  1117. void   somtEmitAttributeEpilog()
  1118. {
  1119.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitAttributeEpilog)
  1120.     (this);
  1121. }
  1122.  
  1123.  
  1124. /* method: somtEmitConstantProlog */
  1125. void   somtEmitConstantProlog()
  1126. {
  1127.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitConstantProlog)
  1128.     (this);
  1129. }
  1130.  
  1131.  
  1132. /* method: somtEmitConstant */
  1133. void   somtEmitConstant(SOMTConstEntryC* con)
  1134. {
  1135.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitConstant)
  1136.     (this,con);
  1137. }
  1138.  
  1139.  
  1140. /* method: somtEmitConstantEpilog */
  1141. void   somtEmitConstantEpilog()
  1142. {
  1143.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitConstantEpilog)
  1144.     (this);
  1145. }
  1146.  
  1147.  
  1148. /* method: somtEmitTypedefProlog */
  1149. void   somtEmitTypedefProlog()
  1150. {
  1151.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitTypedefProlog)
  1152.     (this);
  1153. }
  1154.  
  1155.  
  1156. /* method: somtEmitTypedef */
  1157. void   somtEmitTypedef(SOMTTypedefEntryC* td)
  1158. {
  1159.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitTypedef)
  1160.     (this,td);
  1161. }
  1162.  
  1163.  
  1164. /* method: somtEmitTypedefEpilog */
  1165. void   somtEmitTypedefEpilog()
  1166. {
  1167.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitTypedefEpilog)
  1168.     (this);
  1169. }
  1170.  
  1171.  
  1172. /* method: somtEmitStructProlog */
  1173. void   somtEmitStructProlog()
  1174. {
  1175.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitStructProlog)
  1176.     (this);
  1177. }
  1178.  
  1179.  
  1180. /* method: somtEmitStruct */
  1181. void   somtEmitStruct(SOMTStructEntryC* struc)
  1182. {
  1183.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitStruct)
  1184.     (this,struc);
  1185. }
  1186.  
  1187.  
  1188. /* method: somtEmitStructEpilog */
  1189. void   somtEmitStructEpilog()
  1190. {
  1191.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitStructEpilog)
  1192.     (this);
  1193. }
  1194.  
  1195.  
  1196. /* method: somtEmitUnionProlog */
  1197. void   somtEmitUnionProlog()
  1198. {
  1199.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitUnionProlog)
  1200.     (this);
  1201. }
  1202.  
  1203.  
  1204. /* method: somtEmitUnion */
  1205. void   somtEmitUnion(SOMTUnionEntryC* un)
  1206. {
  1207.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitUnion)
  1208.     (this,un);
  1209. }
  1210.  
  1211.  
  1212. /* method: somtEmitUnionEpilog */
  1213. void   somtEmitUnionEpilog()
  1214. {
  1215.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitUnionEpilog)
  1216.     (this);
  1217. }
  1218.  
  1219.  
  1220. /* method: somtEmitEnumProlog */
  1221. void   somtEmitEnumProlog()
  1222. {
  1223.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitEnumProlog)
  1224.     (this);
  1225. }
  1226.  
  1227.  
  1228. /* method: somtEmitEnum */
  1229. void   somtEmitEnum(SOMTEnumEntryC* en)
  1230. {
  1231.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitEnum)
  1232.     (this,en);
  1233. }
  1234.  
  1235.  
  1236. /* method: somtEmitEnumEpilog */
  1237. void   somtEmitEnumEpilog()
  1238. {
  1239.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitEnumEpilog)
  1240.     (this);
  1241. }
  1242.  
  1243.  
  1244. /* method: somtEmitInterfaceProlog */
  1245. void   somtEmitInterfaceProlog()
  1246. {
  1247.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitInterfaceProlog)
  1248.     (this);
  1249. }
  1250.  
  1251.  
  1252. /* method: somtEmitInterface */
  1253. void   somtEmitInterface(SOMTClassEntryC* intfc)
  1254. {
  1255.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitInterface)
  1256.     (this,intfc);
  1257. }
  1258.  
  1259.  
  1260. /* method: somtEmitInterfaceEpilog */
  1261. void   somtEmitInterfaceEpilog()
  1262. {
  1263.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitInterfaceEpilog)
  1264.     (this);
  1265. }
  1266.  
  1267.  
  1268. /* method: somtEmitModuleProlog */
  1269. void   somtEmitModuleProlog()
  1270. {
  1271.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitModuleProlog)
  1272.     (this);
  1273. }
  1274.  
  1275.  
  1276. /* method: somtEmitModule */
  1277. void   somtEmitModule(SOMTModuleEntryC* mod)
  1278. {
  1279.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitModule)
  1280.     (this,mod);
  1281. }
  1282.  
  1283.  
  1284. /* method: somtEmitModuleEpilog */
  1285. void   somtEmitModuleEpilog()
  1286. {
  1287.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitModuleEpilog)
  1288.     (this);
  1289. }
  1290.  
  1291.  
  1292. /* method: somtEmitMethodsProlog */
  1293. void   somtEmitMethodsProlog()
  1294. {
  1295.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitMethodsProlog)
  1296.     (this);
  1297. }
  1298.  
  1299.  
  1300. /* method: somtEmitMethods */
  1301. void   somtEmitMethods(SOMTMethodEntryC* method)
  1302. {
  1303.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitMethods)
  1304.     (this,method);
  1305. }
  1306.  
  1307.  
  1308. /* method: somtEmitMethodsEpilog */
  1309. void   somtEmitMethodsEpilog()
  1310. {
  1311.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitMethodsEpilog)
  1312.     (this);
  1313. }
  1314.  
  1315.  
  1316. /* method: somtEmitMethod */
  1317. void   somtEmitMethod(SOMTMethodEntryC* entry)
  1318. {
  1319.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitMethod)
  1320.     (this,entry);
  1321. }
  1322.  
  1323.  
  1324. /* method: somtEmitEpilog */
  1325. void   somtEmitEpilog()
  1326. {
  1327.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitEpilog)
  1328.     (this);
  1329. }
  1330.  
  1331.  
  1332. /* method: somtScanBases */
  1333. boolean   somtScanBases(string prolog, 
  1334.         string each, 
  1335.         string epilog)
  1336. {
  1337.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanBases)
  1338.     (this,prolog,each,epilog);
  1339. }
  1340.  
  1341.  
  1342. /* method: somtCheckVisibility */
  1343. boolean   somtCheckVisibility(SOMTMethodEntryC* entry)
  1344. {
  1345. /*
  1346.  *  Return 1 (true) if <entry> should be visible in the current
  1347.  *  target file.  This method is used by each of the following filter
  1348.  *  methods that are concerned with visibility.
  1349.  *  The default rule for visibility is:
  1350.  *    only private methods are visible in private target files,
  1351.  *    only public methods are visibile in public target files,
  1352.  *    all methods are visibile in implementation or <somtAllE> target
  1353.  *    files.
  1354.  */
  1355.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtCheckVisibility)
  1356.     (this,entry);
  1357. }
  1358.  
  1359.  
  1360. /* method: somtNew */
  1361. boolean   somtNew(SOMTMethodEntryC* entry)
  1362. {
  1363. /*
  1364.  *  Returns 1 (true) if <entry> is a method introduced by the target
  1365.  *  class and its visibility matches <somtTargetType> (somtImplementationE
  1366.  *  matches both private and public)
  1367.  */
  1368.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtNew)
  1369.     (this,entry);
  1370. }
  1371.  
  1372.  
  1373. /* method: somtImplemented */
  1374. boolean   somtImplemented(SOMTMethodEntryC* entry)
  1375. {
  1376. /*
  1377.  *  Returns 1 (true) if <entry> is a method introduced or overridden
  1378.  *  by the target class and its visibility matches <somtTargetType>
  1379.  *  (somtImplementationE matches both private and public)
  1380.  */
  1381.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtImplemented)
  1382.     (this,entry);
  1383. }
  1384.  
  1385.  
  1386. /* method: somtOverridden */
  1387. boolean   somtOverridden(SOMTMethodEntryC* entry)
  1388. {
  1389. /*
  1390.  *  Returns 1 (true) if <entry> is an overridding method of the target class
  1391.  *  and its visibility matches <somtTargetType> (somtImplementationE
  1392.  *  matches both private and public)
  1393.  */
  1394.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtOverridden)
  1395.     (this,entry);
  1396. }
  1397.  
  1398.  
  1399. /* method: somtInherited */
  1400. boolean   somtInherited(SOMTMethodEntryC* entry)
  1401. {
  1402. /*
  1403.  *  Returns 1 (true) if <entry> is inherited
  1404.  *  by the target class and its visibility matches <somtTargetType>
  1405.  *  (somtImplementationE matches both private and public)
  1406.  */
  1407.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtInherited)
  1408.     (this,entry);
  1409. }
  1410.  
  1411.  
  1412. /* method: somtAllVisible */
  1413. boolean   somtAllVisible(SOMTMethodEntryC* entry)
  1414. {
  1415. /*
  1416.  *  Returns 1 (true) if <entry> is supported by the target class and
  1417.  *  its visibility matches <somtTargetType> (somtImplementationE
  1418.  *  matches both private and public)
  1419.  */
  1420.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtAllVisible)
  1421.     (this,entry);
  1422. }
  1423.  
  1424.  
  1425. /* method: somtAll */
  1426. boolean   somtAll(SOMTMethodEntryC* entry)
  1427. {
  1428. /*
  1429.  *  Returns 1 (true) if <entry> is supported by the target class.
  1430.  */
  1431.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtAll)
  1432.     (this,entry);
  1433. }
  1434.  
  1435.  
  1436. /* method: somtNewNoProc */
  1437. boolean   somtNewNoProc(SOMTEntryC* entry)
  1438. {
  1439. /*
  1440.  *  Returns 1 (true) if somtNew does and the method
  1441.  *  IS NOT a direct call Procedure.
  1442.  */
  1443.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtNewNoProc)
  1444.     (this,entry);
  1445. }
  1446.  
  1447.  
  1448. /* method: somtPrivOrPub */
  1449. boolean   somtPrivOrPub(SOMTEntryC* entry)
  1450. {
  1451. /*
  1452.  *  Returns 1 (true) if entry is Private or Public.
  1453.  */
  1454.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtPrivOrPub)
  1455.     (this,entry);
  1456. }
  1457.  
  1458.  
  1459. /* method: somtNewProc */
  1460. boolean   somtNewProc(SOMTEntryC* entry)
  1461. {
  1462. /*
  1463.  *  Returns 1 (true) if somtNew does and the method
  1464.  *  IS a direct call Procedure.
  1465.  */
  1466.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtNewProc)
  1467.     (this,entry);
  1468. }
  1469.  
  1470.  
  1471. /* method: somtLink */
  1472. boolean   somtLink(SOMTEntryC* entry)
  1473. {
  1474. /*
  1475.  *  Returns 1 (true) if "nolink" is not set.
  1476.  */
  1477.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtLink)
  1478.     (this,entry);
  1479. }
  1480.  
  1481.  
  1482. /* method: somtVA */
  1483. boolean   somtVA(SOMTEntryC* entry)
  1484. {
  1485. /*
  1486.  *  Returns 1 (true) if entry is a VarArgs method.
  1487.  */
  1488.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtVA)
  1489.     (this,entry);
  1490. }
  1491.  
  1492.  
  1493. /* method: somtScanMethods */
  1494. boolean   somtScanMethods(string filter, 
  1495.         string prolog, 
  1496.         string each, 
  1497.         string epilog, 
  1498.         boolean forceProlog)
  1499. {
  1500. /*
  1501.  *  Will only call <each> on methods accepted by <filter>.
  1502.  *  If <forceProlog> is not true then the prolog and epilog emiters
  1503.  *  will be called only if there is at least one method that passes
  1504.  *  the filter.
  1505.  */
  1506.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanMethods)
  1507.     (this,filter,prolog,each,epilog,forceProlog);
  1508. }
  1509.  
  1510.  
  1511. /* method: somtScanConstants */
  1512. boolean   somtScanConstants(string prolog, 
  1513.         string each, 
  1514.         string epilog)
  1515. {
  1516.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanConstants)
  1517.     (this,prolog,each,epilog);
  1518. }
  1519.  
  1520.  
  1521. /* method: somtScanTypedefs */
  1522. boolean   somtScanTypedefs(string prolog, 
  1523.         string each, 
  1524.         string epilog)
  1525. {
  1526.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanTypedefs)
  1527.     (this,prolog,each,epilog);
  1528. }
  1529.  
  1530.  
  1531. /* method: somtScanStructs */
  1532. boolean   somtScanStructs(string prolog, 
  1533.         string each, 
  1534.         string epilog)
  1535. {
  1536.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanStructs)
  1537.     (this,prolog,each,epilog);
  1538. }
  1539.  
  1540.  
  1541. /* method: somtScanUnions */
  1542. boolean   somtScanUnions(string prolog, 
  1543.         string each, 
  1544.         string epilog)
  1545. {
  1546.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanUnions)
  1547.     (this,prolog,each,epilog);
  1548. }
  1549.  
  1550.  
  1551. /* method: somtScanEnums */
  1552. boolean   somtScanEnums(string prolog, 
  1553.         string each, 
  1554.         string epilog)
  1555. {
  1556.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanEnums)
  1557.     (this,prolog,each,epilog);
  1558. }
  1559.  
  1560.  
  1561. /* method: somtScanData */
  1562. boolean   somtScanData(string prolog, 
  1563.         string each, 
  1564.         string epilog)
  1565. {
  1566.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanData)
  1567.     (this,prolog,each,epilog);
  1568. }
  1569.  
  1570.  
  1571. /* method: somtScanAttributes */
  1572. boolean   somtScanAttributes(string prolog, 
  1573.         string each, 
  1574.         string epilog)
  1575. {
  1576.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanAttributes)
  1577.     (this,prolog,each,epilog);
  1578. }
  1579.  
  1580.  
  1581. /* method: somtScanInterfaces */
  1582. boolean   somtScanInterfaces(string prolog, 
  1583.         string each, 
  1584.         string epilog)
  1585. {
  1586.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanInterfaces)
  1587.     (this,prolog,each,epilog);
  1588. }
  1589.  
  1590.  
  1591. /* method: somtScanModules */
  1592. boolean   somtScanModules(string prolog, 
  1593.         string each, 
  1594.         string epilog)
  1595. {
  1596.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanModules)
  1597.     (this,prolog,each,epilog);
  1598. }
  1599.  
  1600.  
  1601. /* method: somtScanPassthru */
  1602. boolean   somtScanPassthru(boolean before, 
  1603.         string prolog, 
  1604.         string each, 
  1605.         string epilog)
  1606. {
  1607.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanPassthru)
  1608.     (this,before,prolog,each,epilog);
  1609. }
  1610.  
  1611.  
  1612. /* method: somtEmitFullPassthru */
  1613. void   somtEmitFullPassthru(boolean before, 
  1614.         string language)
  1615. {
  1616. /*
  1617.  *  Emits each passthru section defined for the language and targetType,
  1618.  *  and the result of the somtIsBeforePassthru method is equal to the
  1619.  *  before parameter.  (before = 1(true), or before = 0(false), i.e. after.)
  1620.  */
  1621.    SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtEmitFullPassthru)
  1622.     (this,before,language);
  1623. }
  1624.  
  1625.  
  1626. /* method: somtScanDataF */
  1627. boolean   somtScanDataF(string filter, 
  1628.         string prolog, 
  1629.         string each, 
  1630.         string epilog, 
  1631.         boolean forceProlog)
  1632. {
  1633. /*
  1634.  *  This method is like somtScanData but it also provides a paramater
  1635.  *  for a filter method.
  1636.  */
  1637.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanDataF)
  1638.     (this,filter,prolog,each,epilog,forceProlog);
  1639. }
  1640.  
  1641.  
  1642. /* method: somtScanBasesF */
  1643. boolean   somtScanBasesF(string filter, 
  1644.         string prolog, 
  1645.         string each, 
  1646.         string epilog, 
  1647.         boolean forceProlog)
  1648. {
  1649. /*
  1650.  *  This method is like somtScanBases but it also provides a paramater
  1651.  *  for a filter method.
  1652.  */
  1653.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtScanBasesF)
  1654.     (this,filter,prolog,each,epilog,forceProlog);
  1655. }
  1656.  
  1657.  
  1658. /* method: somtGetGlobalModifierValue */
  1659. string   somtGetGlobalModifierValue(string modifierName)
  1660. {
  1661. /*
  1662.  *  Returns the value of the specified global modifier.
  1663.  *  Global modifiers are specified when the SOM Compiler is invoked,
  1664.  *  via the "-a" option.  For example,
  1665.  *                        sc -a"foo=bar"  file.idl
  1666.  *  specifies to the SOM Compiler and the emitters being run that
  1667.  *  the global modifier "foo" has the value "bar."
  1668.  *  Values of global modifiers are transient; they last only for the
  1669.  *  duration of the compile for which they were specified.
  1670.  *  If a modifier is specified in the "sc" command with no value,
  1671.  *  as in
  1672.  *                        sc -afoo file.idl
  1673.  *  then the result of this method will be non-NULL.
  1674.  *  If no such modifier is specified, then the result is NULL.
  1675.  */
  1676.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtGetGlobalModifierValue)
  1677.     (this,modifierName);
  1678. }
  1679.  
  1680.  
  1681. /* method: somtGetFirstGlobalDefinition */
  1682. SOMTEntryC*   somtGetFirstGlobalDefinition()
  1683. {
  1684. /*
  1685.  *  Returns the first type or constant definition that is not
  1686.  *  associated with any interface or module.
  1687.  *  These global definitions must be surrounded by the somemittypes
  1688.  *  pragmas for them to be visible via this method.
  1689.  *  E.g., #pragma somemittypes on
  1690.  *        ....
  1691.  *        #pragma someemittypes off
  1692.  *  The list of global definitions returned by this method and
  1693.  *  the somtGetNextGlobalDefinition method may include entries
  1694.  *  for forward declarations as well as typedefs and constants.
  1695.  *  Global structs and unions are also included in the list.
  1696.  */
  1697.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtGetFirstGlobalDefinition)
  1698.     (this);
  1699. }
  1700.  
  1701.  
  1702. /* method: somtGetNextGlobalDefinition */
  1703. SOMTEntryC*   somtGetNextGlobalDefinition()
  1704. {
  1705. /*
  1706.  *  Returns the next type or constant definition that is not
  1707.  *  associated with any interface or module, relative to a
  1708.  *  previous call to somtGetFirstGlobalDefinition or
  1709.  *  somtGetNextGlobalDefinition.
  1710.  */
  1711.    return SOM_ResolveD(this,SOMTEmitC,SOMTEmitC,somtGetNextGlobalDefinition)
  1712.     (this);
  1713. }
  1714.  
  1715.  
  1716. /*
  1717.  * Reintroduce inherited methods
  1718.  */
  1719.  
  1720. /* initializer method: somDefaultInit */
  1721. void   somDefaultInit(som3InitCtrl* ctrl)
  1722. {
  1723. /*
  1724.  *  A default initializer for a SOM object. Passing a null ctrl
  1725.  *  indicates to the receiver that its class is the class of the
  1726.  *  object being initialized, whereby the initializer will determine
  1727.  *  an appropriate control structure.
  1728.  */
  1729.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultInit)
  1730.     (this,ctrl);
  1731. }
  1732.  
  1733.  
  1734. /* method: somDestruct */
  1735. void   somDestruct(octet doFree, 
  1736.         som3DestructCtrl* ctrl)
  1737. {
  1738. /*
  1739.  *  The default destructor for a SOM object. A nonzero <doFree>
  1740.  *  indicates that the object storage should be freed by the
  1741.  *  object's class (via somDeallocate) after uninitialization.
  1742.  *  As with somDefaultInit, a null ctrl can be passed.
  1743.  */
  1744.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDestruct)
  1745.     (this,doFree,ctrl);
  1746. }
  1747.  
  1748.  
  1749. /* initializer method: somDefaultCopyInit */
  1750. void   somDefaultCopyInit(som3InitCtrl* ctrl, 
  1751.         SOMObject* fromObj)
  1752. {
  1753. /*
  1754.  *  A default copy constructor. Use this to make copies of objects for
  1755.  *  calling methods with "by-value" argument semantics.
  1756.  */
  1757.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultCopyInit)
  1758.     (this,ctrl,fromObj);
  1759. }
  1760.  
  1761.  
  1762. /* method: somDefaultAssign */
  1763. SOMTEmitC*  somDefaultAssign(som3AssignCtrl* ctrl, 
  1764.         SOMObject* fromObj)
  1765. {
  1766. /*
  1767.  *  A default assignment operator. Use this to "assign" the state of one
  1768.  *  object to another.
  1769.  */
  1770.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultAssign)
  1771.     (this,ctrl,fromObj);
  1772. }
  1773.  
  1774.  
  1775. /* initializer method: somDefaultConstCopyInit */
  1776. void   somDefaultConstCopyInit(som3InitCtrl* ctrl, 
  1777.         SOMObject* fromObj)
  1778. {
  1779. /*
  1780.  *  A default copy constructor that uses a const fromObj.
  1781.  */
  1782.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultConstCopyInit)
  1783.     (this,ctrl,fromObj);
  1784. }
  1785.  
  1786.  
  1787. /* initializer method: somDefaultVCopyInit */
  1788. void   somDefaultVCopyInit(som3InitCtrl* ctrl, 
  1789.         SOMObject* fromObj)
  1790. {
  1791. /*
  1792.  *  A default copy constructor that uses a volatile fromObj.
  1793.  */
  1794.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultVCopyInit)
  1795.     (this,ctrl,fromObj);
  1796. }
  1797.  
  1798.  
  1799. /* initializer method: somDefaultConstVCopyInit */
  1800. void   somDefaultConstVCopyInit(som3InitCtrl* ctrl, 
  1801.         SOMObject* fromObj)
  1802. {
  1803. /*
  1804.  *  A default copy constructor that uses a const volatile fromObj.
  1805.  */
  1806.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultConstVCopyInit)
  1807.     (this,ctrl,fromObj);
  1808. }
  1809.  
  1810.  
  1811. /* method: somDefaultConstAssign */
  1812. SOMTEmitC*  somDefaultConstAssign(som3AssignCtrl* ctrl, 
  1813.         SOMObject* fromObj)
  1814. {
  1815. /*
  1816.  *  A default assignment operator that uses a const fromObj.
  1817.  */
  1818.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultConstAssign)
  1819.     (this,ctrl,fromObj);
  1820. }
  1821.  
  1822.  
  1823. /* method: somDefaultVAssign */
  1824. SOMTEmitC*  somDefaultVAssign(som3AssignCtrl* ctrl, 
  1825.         SOMObject* fromObj)
  1826. {
  1827. /*
  1828.  *  A default assignment operator that uses a volatile fromObj.
  1829.  */
  1830.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultVAssign)
  1831.     (this,ctrl,fromObj);
  1832. }
  1833.  
  1834.  
  1835. /* method: somDefaultConstVAssign */
  1836. SOMTEmitC*  somDefaultConstVAssign(som3AssignCtrl* ctrl, 
  1837.         SOMObject* fromObj)
  1838. {
  1839. /*
  1840.  *  A default assignment operator that uses a const volatile fromObj.
  1841.  */
  1842.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somDefaultConstVAssign)
  1843.     (this,ctrl,fromObj);
  1844. }
  1845.  
  1846.  
  1847. /* method: somInit */
  1848. void   somInit()
  1849. {
  1850. /*
  1851.  *  Obsolete but still supported. Override somDefaultInit instead of somInit.
  1852.  */
  1853.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somInit)
  1854.     (this);
  1855. }
  1856.  
  1857.  
  1858. /* method: somFree */
  1859. void   somFree()
  1860. {
  1861. /*
  1862.  *  Use as directed by framework implementations.
  1863.  */
  1864.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somFree)
  1865.     (this);
  1866. }
  1867.  
  1868.  
  1869. /* method: somUninit */
  1870. void   somUninit()
  1871. {
  1872. /*
  1873.  *  Obsolete but still supported. Override somDestruct instead of somUninit.
  1874.  */
  1875.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somUninit)
  1876.     (this);
  1877. }
  1878.  
  1879.  
  1880. /* method: somGetClass */
  1881. SOMClass*   somGetClass()
  1882. {
  1883. /*
  1884.  *  Return the receiver's class.
  1885.  */
  1886.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somGetClass)
  1887.     (this);
  1888. }
  1889.  
  1890.  
  1891. /* method: somGetClassName */
  1892. string   somGetClassName()
  1893. {
  1894. /*
  1895.  *  Return the name of the receiver's class.
  1896.  */
  1897.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somGetClassName)
  1898.     (this);
  1899. }
  1900.  
  1901.  
  1902. /* method: somGetSize */
  1903. long   somGetSize()
  1904. {
  1905. /*
  1906.  *  Return the size of the receiver.
  1907.  */
  1908.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somGetSize)
  1909.     (this);
  1910. }
  1911.  
  1912.  
  1913. /* method: somIsA */
  1914. boolean   somIsA(SOMClass* aClassObj)
  1915. {
  1916. /*
  1917.  *  Returns 1 (true) if the receiver responds to methods
  1918.  *  introduced by <aClassObj>, and 0 (false) otherwise.
  1919.  */
  1920.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somIsA)
  1921.     (this,aClassObj);
  1922. }
  1923.  
  1924.  
  1925. /* method: somIsInstanceOf */
  1926. boolean   somIsInstanceOf(SOMClass* aClassObj)
  1927. {
  1928. /*
  1929.  *  Returns 1 (true) if the receiver is an instance of
  1930.  *  <aClassObj> and 0 (false) otherwise.
  1931.  */
  1932.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somIsInstanceOf)
  1933.     (this,aClassObj);
  1934. }
  1935.  
  1936.  
  1937. /* method: somRespondsTo */
  1938. boolean   somRespondsTo(somId mId)
  1939. {
  1940. /*
  1941.  *  Returns 1 (true) if the indicated method can be invoked
  1942.  *  on the receiver and 0 (false) otherwise.
  1943.  */
  1944.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somRespondsTo)
  1945.     (this,mId);
  1946. }
  1947.  
  1948.  
  1949. /* va_list method: somDispatch */
  1950.  
  1951. /*
  1952.  *  This method provides a generic, class-specific dispatch mechanism.
  1953.  *  It accepts as input <retValue> a pointer to the memory area to be
  1954.  *  loaded with the result of dispatching the method indicated by
  1955.  *  <methodId> using the arguments in <ap>. <ap> contains the object
  1956.  *  on which the method is to be invoked as the first argument.
  1957.  */
  1958. /* the va_list invocation form */
  1959. boolean   SOMTEmitC_somDispatch(somToken* retValue, 
  1960.         somId methodId, 
  1961.         va_list ap)
  1962. {return SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatch)
  1963.     (this,retValue,methodId,ap);
  1964. }
  1965.  
  1966. /* the varargs invocation form */
  1967. boolean   somDispatch(somToken* retValue, 
  1968.         somId methodId, 
  1969.         ...)
  1970. {
  1971. /*
  1972.  *  This method provides a generic, class-specific dispatch mechanism.
  1973.  *  It accepts as input <retValue> a pointer to the memory area to be
  1974.  *  loaded with the result of dispatching the method indicated by
  1975.  *  <methodId> using the arguments in <ap>. <ap> contains the object
  1976.  *  on which the method is to be invoked as the first argument.
  1977.  */
  1978.    va_list ap;
  1979.    va_start(ap, methodId);
  1980.    boolean __somResult = 
  1981.       SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatch)
  1982.     (this,retValue,methodId,ap);
  1983.    va_end(ap);
  1984.    return __somResult;
  1985. }
  1986.  
  1987.  
  1988. /* va_list method: somClassDispatch */
  1989.  
  1990. /*
  1991.  *  Like somDispatch, but method resolution for static methods is done
  1992.  *  according to the clsObj instance method table.
  1993.  */
  1994. /* the va_list invocation form */
  1995. boolean   SOMTEmitC_somClassDispatch(SOMClass* clsObj, 
  1996.         somToken* retValue, 
  1997.         somId methodId, 
  1998.         va_list ap)
  1999. {return SOM_ResolveD(this,SOMTEmitC,SOMObject,somClassDispatch)
  2000.     (this,clsObj,retValue,methodId,ap);
  2001. }
  2002.  
  2003. /* the varargs invocation form */
  2004. boolean   somClassDispatch(SOMClass* clsObj, 
  2005.         somToken* retValue, 
  2006.         somId methodId, 
  2007.         ...)
  2008. {
  2009. /*
  2010.  *  Like somDispatch, but method resolution for static methods is done
  2011.  *  according to the clsObj instance method table.
  2012.  */
  2013.    va_list ap;
  2014.    va_start(ap, methodId);
  2015.    boolean __somResult = 
  2016.       SOM_ResolveD(this,SOMTEmitC,SOMObject,somClassDispatch)
  2017.     (this,clsObj,retValue,methodId,ap);
  2018.    va_end(ap);
  2019.    return __somResult;
  2020. }
  2021.  
  2022.  
  2023. /* method: somCastObj */
  2024. boolean   somCastObj(SOMClass* cls)
  2025. {
  2026. /*
  2027.  *  cast the receiving object to cls (which must be an ancestor of the
  2028.  *  objects true class. Returns true on success.
  2029.  */
  2030.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somCastObj)
  2031.     (this,cls);
  2032. }
  2033.  
  2034.  
  2035. /* method: somResetObj */
  2036. boolean   somResetObj()
  2037. {
  2038. /*
  2039.  *  reset an object to its true class. Returns true always.
  2040.  */
  2041.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somResetObj)
  2042.     (this);
  2043. }
  2044.  
  2045.  
  2046. /* va_list method: somDispatchV */
  2047.  
  2048. /*
  2049.  *  Obsolete. Use somDispatch instead.
  2050.  */
  2051. /* the va_list invocation form */
  2052. void   SOMTEmitC_somDispatchV(somId methodId, 
  2053.         somId descriptor, 
  2054.         va_list ap)
  2055. {   SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatchV)
  2056.     (this,methodId,descriptor,ap);
  2057. }
  2058.  
  2059. /* the varargs invocation form */
  2060. void   somDispatchV(somId methodId, 
  2061.         somId descriptor, 
  2062.         ...)
  2063. {
  2064. /*
  2065.  *  Obsolete. Use somDispatch instead.
  2066.  */
  2067.    va_list ap;
  2068.    va_start(ap, descriptor);
  2069.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatchV)
  2070.     (this,methodId,descriptor,ap);
  2071.    va_end(ap);
  2072. }
  2073.  
  2074.  
  2075. /* va_list method: somDispatchL */
  2076.  
  2077. /*
  2078.  *  Obsolete. Use somDispatch instead.
  2079.  */
  2080. /* the va_list invocation form */
  2081. long   SOMTEmitC_somDispatchL(somId methodId, 
  2082.         somId descriptor, 
  2083.         va_list ap)
  2084. {return SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatchL)
  2085.     (this,methodId,descriptor,ap);
  2086. }
  2087.  
  2088. /* the varargs invocation form */
  2089. long   somDispatchL(somId methodId, 
  2090.         somId descriptor, 
  2091.         ...)
  2092. {
  2093. /*
  2094.  *  Obsolete. Use somDispatch instead.
  2095.  */
  2096.    va_list ap;
  2097.    va_start(ap, descriptor);
  2098.    long __somResult = 
  2099.       SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatchL)
  2100.     (this,methodId,descriptor,ap);
  2101.    va_end(ap);
  2102.    return __somResult;
  2103. }
  2104.  
  2105.  
  2106. /* va_list method: somDispatchA */
  2107.  
  2108. /*
  2109.  *  Obsolete. Use somDispatch instead.
  2110.  */
  2111. /* the va_list invocation form */
  2112. void*   SOMTEmitC_somDispatchA(somId methodId, 
  2113.         somId descriptor, 
  2114.         va_list ap)
  2115. {return SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatchA)
  2116.     (this,methodId,descriptor,ap);
  2117. }
  2118.  
  2119. /* the varargs invocation form */
  2120. void*   somDispatchA(somId methodId, 
  2121.         somId descriptor, 
  2122.         ...)
  2123. {
  2124. /*
  2125.  *  Obsolete. Use somDispatch instead.
  2126.  */
  2127.    va_list ap;
  2128.    va_start(ap, descriptor);
  2129.    void* __somResult = 
  2130.       SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatchA)
  2131.     (this,methodId,descriptor,ap);
  2132.    va_end(ap);
  2133.    return __somResult;
  2134. }
  2135.  
  2136.  
  2137. /* va_list method: somDispatchD */
  2138.  
  2139. /*
  2140.  *  Obsolete. Use somDispatch instead.
  2141.  */
  2142. /* the va_list invocation form */
  2143. double   SOMTEmitC_somDispatchD(somId methodId, 
  2144.         somId descriptor, 
  2145.         va_list ap)
  2146. {return SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatchD)
  2147.     (this,methodId,descriptor,ap);
  2148. }
  2149.  
  2150. /* the varargs invocation form */
  2151. double   somDispatchD(somId methodId, 
  2152.         somId descriptor, 
  2153.         ...)
  2154. {
  2155. /*
  2156.  *  Obsolete. Use somDispatch instead.
  2157.  */
  2158.    va_list ap;
  2159.    va_start(ap, descriptor);
  2160.    double __somResult = 
  2161.       SOM_ResolveD(this,SOMTEmitC,SOMObject,somDispatchD)
  2162.     (this,methodId,descriptor,ap);
  2163.    va_end(ap);
  2164.    return __somResult;
  2165. }
  2166.  
  2167.  
  2168. /* method: somPrintSelf */
  2169. SOMObject*   somPrintSelf()
  2170. {
  2171. /*
  2172.  *  Uses <SOMOutCharRoutine> to write a brief string with identifying
  2173.  *  information about this object.  The default implementation just gives
  2174.  *  the object's class name and its address in memory.
  2175.  *  <self> is returned.
  2176.  */
  2177.    return SOM_ResolveD(this,SOMTEmitC,SOMObject,somPrintSelf)
  2178.     (this);
  2179. }
  2180.  
  2181.  
  2182. /* method: somDumpSelf */
  2183. void   somDumpSelf(long level)
  2184. {
  2185. /*
  2186.  *  Uses <SOMOutCharRoutine> to write a detailed description of this object
  2187.  *  and its current state.
  2188.  * 
  2189.  *  <level> indicates the nesting level for describing compound objects
  2190.  *  it must be greater than or equal to zero.  All lines in the
  2191.  *  description will be preceeded by <2*level> spaces.
  2192.  * 
  2193.  *  This routine only actually writes the data that concerns the object
  2194.  *  as a whole, such as class, and uses <somDumpSelfInt> to describe
  2195.  *  the object's current state.  This approach allows readable
  2196.  *  descriptions of compound objects to be constructed.
  2197.  * 
  2198.  *  Generally it is not necessary to override this method, if it is
  2199.  *  overriden it generally must be completely replaced.
  2200.  */
  2201.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDumpSelf)
  2202.     (this,level);
  2203. }
  2204.  
  2205.  
  2206. /* method: somDumpSelfInt */
  2207. void   somDumpSelfInt(long level)
  2208. {
  2209. /*
  2210.  *  Uses <SOMOutCharRoutine> to write in the current state of this object.
  2211.  *  Generally this method will need to be overridden.  When overriding
  2212.  *  it, begin by calling the parent class form of this method and then
  2213.  *  write in a description of your class's instance data. This will
  2214.  *  result in a description of all the object's instance data going
  2215.  *  from its root ancestor class to its specific class.
  2216.  */
  2217.    SOM_ResolveD(this,SOMTEmitC,SOMObject,somDumpSelfInt)
  2218.     (this,level);
  2219. }
  2220.  
  2221.  
  2222.  
  2223. };   /* SOMTEmitC */
  2224.  
  2225.  
  2226.  
  2227. #endif       /* SOM_SOMTEmitC_xh */
  2228.