ROSE 0.11.145.321
sageContainer.h
1#ifndef ROSE_sageContainer_H
2#define ROSE_sageContainer_H
3#include <RoseFirst.h>
4#include <rosedll.h>
5#include <Cxx_GrammarDeclarations.h>
6#include <Cxx_GrammarVariants.h>
7
8#include <Rose/BinaryAnalysis/Address.h>
9#include <Rose/BinaryAnalysis/RelativeVirtualAddress.h>
10
11#include <map>
12#include <ostream>
13#include <set>
14#include <string>
15#include <vector>
16#include <unordered_set>
17#include <unordered_map>
18
19// These declarations were originally generated by ROSETTA's CxxGrammarMetaProgram tool, but since they never depended on any of
20// that tool's inputs, they don't need to generated.
21
23// DQ (6/1/2004): Change this to be a list of pointers to SgInitializedName (to fix Beata's Bug beata.C)
24typedef Rose_STL_Container<SgInitializedName*> SgInitializedNamePtrList;
25typedef SgInitializedNamePtrList* SgInitializedNamePtrListPtr;
26
28
29// DQ (1/28/2016): Different ways of documenting typedefs (none appear to be working with Doxygen).
33typedef Rose_STL_Container<SgDeclarationStatement*> SgDeclarationStatementPtrList;
34
38typedef SgDeclarationStatementPtrList* SgDeclarationStatementPtrListPtr;
39
40#ifdef ROSE_ENABLE_BINARY_ANALYSIS
41// tps (8/20/2007): Added support for binaries.
45typedef Rose_STL_Container<SgAsmBlock*> SgAsmBlockPtrList;
46
48typedef SgAsmBlockPtrList* SgAsmBlockPtrListPtr;
49
50// JJW (8/28/2008): Added SgAsmInterpretation
51typedef Rose_STL_Container<SgAsmInterpretation*> SgAsmInterpretationPtrList;
52
53// DQ (6/14/2008): Added to support new exec format IR nodes
54typedef Rose_STL_Container<SgAsmGenericSection*> SgAsmGenericSectionPtrList;
55typedef SgAsmGenericSectionPtrList* SgAsmGenericSectionPtrListPtr;
56
57typedef Rose_STL_Container<SgAsmGenericFile*> SgAsmGenericFilePtrList;
58typedef SgAsmGenericSectionPtrList* SgAsmGenericFilePtrListPtr;
59
60// DQ (6/14/2008): Added to support new exec format IR nodes
61// typedef Rose_STL_Container<SgAsmGenericSegment*> SgAsmGenericSegmentPtrList;
62// typedef SgAsmGenericSegmentPtrList* SgAsmGenericSegmentPtrListPtr;
63
64// DQ (6/14/2008): Added to support new exec format IR nodes
65// typedef Rose_STL_Container<SgAsmElfSegmentEntry*> SgAsmElfSegmentEntryPtrList;
66// typedef SgAsmElfSegmentEntryPtrList* SgAsmElfSegmentEntryPtrListPtr;
67
68typedef Rose_STL_Container<SgAsmPEImportItem*> SgAsmPEImportItemPtrList;
69typedef SgAsmPEImportItemPtrList* SgAsmPEImportItemPtrListPtr;
70
71typedef Rose_STL_Container<SgAsmPEImportDirectory*> SgAsmPEImportDirectoryPtrList;
72typedef SgAsmPEImportDirectoryPtrList* SgAsmPEImportDirectoryPtrListPtr;
73
74typedef Rose_STL_Container<SgAsmPEImportItem*> SgAsmPEImportItemPtrList;
75typedef SgAsmPEImportItemPtrList* SgAsmPEImportItemPtrListPtr;
76
77// DQ (6/14/2008): Added to support new exec format IR nodes
78typedef Rose_STL_Container<SgAsmElfSymbol*> SgAsmElfSymbolPtrList;
79typedef SgAsmElfSymbolPtrList* SgAsmElfSymbolPtrListPtr;
80
81// DQ (8/4/2008): Added to support new exec format IR nodes
82typedef Rose_STL_Container<SgAsmCoffSymbol*> SgAsmCoffSymbolPtrList;
83typedef SgAsmCoffSymbolPtrList* SgAsmCoffSymbolPtrListPtr;
84
85// DQ (8/8/2008): Added to support new exec format IR nodes
86typedef Rose_STL_Container<SgAsmGenericSymbol*> SgAsmGenericSymbolPtrList;
87typedef SgAsmGenericSymbolPtrList* SgAsmGenericSymbolPtrListPtr;
88#endif
89
90class SgStatement;
91typedef Rose_STL_Container<SgStatement*> SgStatementPtrList;
92typedef SgStatementPtrList* SgStatementPtrListPtr;
93
94class SgBaseClass;
95// DQ (6/21/2005): Change from list of SgBaseClass to list of SgBaseClass*
96typedef Rose_STL_Container<SgBaseClass*> SgBaseClassPtrList;
97typedef SgBaseClassPtrList* SgBaseClassPtrListPtr;
98
99class SgNode;
100typedef Rose_STL_Container<SgNode*> SgNodePtrList;
101typedef SgNodePtrList* SgNodePtrListPtr;
102
103class SgType;
104typedef Rose_STL_Container<SgType*> SgTypePtrList;
105typedef SgTypePtrList* SgTypePtrListPtr;
106
107class SgExpression;
108typedef Rose_STL_Container<SgExpression*> SgExpressionPtrList;
109typedef SgExpressionPtrList* SgExpressionPtrListPtr;
110
111class SgKeyDatumPair;
112typedef Rose_STL_Container<SgKeyDatumPair*> SgKeyDatumPairPtrList;
113
114class SgComprehension;
115typedef Rose_STL_Container<SgComprehension*> SgComprehensionPtrList;
116
117typedef Rose_STL_Container<VariantT> VariantTList;
118
119// Liao 9/27/2010: new typedef for SgVarRefExp list
120class SgVarRefExp;
121typedef Rose_STL_Container<SgVarRefExp*> SgVarRefExpPtrList;
122typedef SgVarRefExpPtrList* SgVarRefExpPtrListPtr;
123
124class SgAttribute;
125typedef Rose_STL_Container<SgAttribute*> SgAttributePtrList;
126typedef SgAttributePtrList* SgAttributePtrListPtr;
127
128// DQ (6/14/2008): I think this should be unsigned char
129// typedef Rose_STL_Container<char*> SgCharPtrList;
130// typedef SgCharPtrList* SgCharPtrListPtr;
131typedef Rose_STL_Container<unsigned char> SgCharList;
132typedef SgCharList* SgCharListPtr;
133
137
138// DQ (4/7/2001) Add SgFile list support for multi-file support within SgProject
139class SgFile;
140typedef std::vector<SgFile*> SgFilePtrList;
141typedef SgFilePtrList* SgFilePtrListPtr;
142
143// DQ (2/27/2019): Modified to add the line number so that we could support adding comments
144// and CPP directives to shared IR nodes to support multi-file compilation.
145// DQ (5/22/2006): Added this support so that we could have general way of interpreting STL
146// containers so that we could simplify that code used to generated code for the destructors.
147// JJW (6/21/2008): Changed to a unordered vector for performance
148typedef int SgFileId;
149typedef std::vector<SgFileId> SgFileIdList;
150// typedef struct { int file_id; int line_number; } SgFileIdLineNumber;
151// typedef std::vector<SgFileIdLineNumber> SgFileIdList;
152typedef int SgFileLineNumber;
153typedef std::vector<SgFileLineNumber> SgFileLineNumberList;
154
155// DQ (5/22/2006): Added this support so that we could have general way of interpreting STL
156// containers so that we could simplify that code used to generated code for the destructors.
157typedef Rose_STL_Container<std::string> SgStringList;
158typedef SgStringList* SgStringListPtr;
159
160// DQ (3/10/2007): Added STL set of SgNode* so that we could support existence tests in the
161// symbol table without a linear search of the symbol table (where we don't use the name).
162// This test helps detect where symbols may have been inserted into the symbol table using
163// two different names, or there names changed without properly unloading and reloading the
164// associated symbol.
165typedef std::set<SgNode*> SgNodeSet;
166typedef SgNodeSet* SgNodeSetPtr;
167
168// PP (7/28/2025): Added support for STL unordered_set of SgNode*
169using SgUnorderedNodeSet = std::unordered_set<SgNode*>;
170using SgUnorderedNodeSetPtr = SgUnorderedNodeSet*;
171
172// DQ (8/1/2025): We need a more global typedef to use for were the name qualification
173// connects to the rest of ROSE.
174using SgUnorderedMapNodeToString = std::unordered_map<SgNode*,std::string>;
175using SgUnorderedMapNodeToStringPtr = SgUnorderedMapNodeToString*;
176
179
182
183// I don't think these are needed
184// typedef vector<ROSEAttributesListContainer*> ROSEAttributesListContainerList;
185// typedef ROSEAttributesListContainerList* ROSEAttributesListContainerListPtr;
186
187// MK: The data member p_nodes of the SgModifierNodes class is now an
188// STL vector, therefore we define the following data types
189typedef std::vector<SgModifierType*> SgModifierTypePtrVector;
190// DQ (12/19/2005): This is not used anywhere!
191// typedef SgModifierTypePtrVector SgModifierTypePtrVectorPtr;
192
193// DQ (12/6/2003): added bit vector typedef to support addition of more flags
194// that can be held in a long integer for the Unparse_Info object.
195typedef std::vector<bool> SgBitVector;
196
197// DQ (3/12/2004): Added for template support
199typedef Rose_STL_Container<SgTemplateParameter*> SgTemplateParameterPtrList;
200typedef SgTemplateParameterPtrList* SgTemplateParameterPtrListPtr;
201
202// DQ (3/12/2004): Added for template support
204typedef Rose_STL_Container<SgTemplateArgument*> SgTemplateArgumentPtrList;
205typedef SgTemplateArgumentPtrList* SgTemplateArgumentPtrListPtr;
206
207// DQ (9/6/2004): Added for qualified name support (e.g. A::B::C::dataMember)
208// This form of qualified name support was later removed!
209// class SgSymbol;
210// typedef list<SgSymbol*> SgSymbolPtrList;
211// typedef SgSymbolPtrList* SgSymbolPtrListPtr;
212
213// DQ (5/6/2005): Added support for SgDirectory IR node!
214class SgDirectory;
215typedef std::vector<SgDirectory*> SgDirectoryPtrList;
216typedef SgDirectoryPtrList* SgDirectoryPtrListPtr;
217
218// DQ (12/21/2005): Added to support explicit name qualifiers (this provides only global qualifier info so far)
219class SgQualifiedName;
220typedef Rose_STL_Container<SgQualifiedName*> SgQualifiedNamePtrList;
221typedef SgQualifiedNamePtrList* SgQualifiedNamePtrListPtr;
222
223// DQ (10/4/2006): Add support for storing unique numbers with SgBasicBlock IR nodes.
224// This mechanism premits unique numbers to be computed and cached and the cache to
225// be easily invalidated.
226// Name this as a list since the ROSETTA code generation will use this information.
227class SgBasicBlock;
229// typedef std::map<SgBasicBlock*,int> SgBasicBlockPtrList;
230typedef std::vector<SgBasicBlockPtr> SgBasicBlockPtrList;
231typedef SgBasicBlockPtrList* SgBasicBlockPtrListPtr;
232
233#ifdef ROSE_ENABLE_BINARY_ANALYSIS
234// DQ (3/15/2007): Added support for binaries.
235typedef Rose_STL_Container<SgAsmStatement*> SgAsmStatementPtrList;
236typedef SgAsmStatementPtrList* SgAsmStatementPtrListPtr;
237
238typedef Rose_STL_Container<SgAsmInstruction*> SgAsmInstructionPtrList;
239typedef SgAsmInstructionPtrList* SgAsmInstructionPtrListPtr;
240
241// DQ (3/15/2007): Added support for binaries.
242typedef Rose_STL_Container<SgAsmExpression*> SgAsmExpressionPtrList;
243typedef SgAsmExpressionPtrList* SgAsmExpressionPtrListPtr;
244
245typedef Rose_STL_Container<SgAsmIntegerValueExpression*> SgAsmIntegerValuePtrList;
246typedef SgAsmIntegerValuePtrList* SgAsmIntegerValuePtrListPtr;
247
248// DQ (3/15/2007): Added support for binaries.
249typedef Rose_STL_Container<SgAsmSynthesizedDeclaration*> SgAsmSynthesizedDeclarationPtrList;
250typedef SgAsmSynthesizedDeclarationPtrList* SgAsmSynthesizedDeclarationPtrListPtr;
251
252typedef Rose_STL_Container<SgAsmX86Instruction*> SgAsmX86InstructionPtrList;
253#ifdef ROSE_ENABLE_ASM_AARCH64
254typedef Rose_STL_Container<SgAsmAarch64Instruction*> SgAsmAarch64InstructionPtrList;
255#endif
256#endif
257
258// DQ (11/19/2007): Added support for Fortran namelist statement.
259typedef Rose_STL_Container<SgNameGroup*> SgNameGroupPtrList;
260typedef SgNameGroupPtrList* SgNameGroupPtrListPtr;
261
262// DQ (11/20/2007): Added support for Fortran data statement.
263typedef Rose_STL_Container<SgDataStatementGroup*> SgDataStatementGroupPtrList;
264typedef SgDataStatementGroupPtrList* SgDataStatementGroupPtrListPtr;
265
266// DQ (11/20/2007): Added support for Fortran data statement.
267typedef Rose_STL_Container<SgDataStatementObject*> SgDataStatementObjectPtrList;
268typedef SgDataStatementObjectPtrList* SgDataStatementObjectPtrListPtr;
269
270// DQ (11/20/2007): Added support for Fortran data statement.
271typedef Rose_STL_Container<SgDataStatementValue*> SgDataStatementValuePtrList;
272typedef SgDataStatementValuePtrList* SgDataStatementValuePtrListPtr;
273
274// DQ (11/21/2007): Added support for common block statements (which can have multiple common blocks)
275typedef Rose_STL_Container<SgCommonBlockObject*> SgCommonBlockObjectPtrList;
276typedef SgCommonBlockObjectPtrList* SgCommonBlockObjectPtrListPtr;
277
278// DQ (11/21/2007): Added support for dimension statements (which can have multiple entries)
279typedef Rose_STL_Container<SgDimensionObject*> SgDimensionObjectPtrList;
280typedef SgDimensionObjectPtrList* SgDimensionObjectPtrListPtr;
281
282// DQ (11/21/2007): Added support for dimension statements (which can have multiple entries)
283typedef Rose_STL_Container<SgLabelSymbol*> SgLabelSymbolPtrList;
284typedef SgLabelSymbolPtrList* SgLabelSymbolPtrListPtr;
285
286// DQ (11/21/2007): Added support for format statements (which can have multiple entries)
287typedef Rose_STL_Container<SgFormatItem*> SgFormatItemPtrList;
288typedef SgFormatItemPtrList* SgFormatItemPtrListPtr;
289
290// DQ (8/21/2008): Moved this from Node.code to make it local since
291// we can't reference the nested addr_t directly from glogal scope.
292// typedef uint64_t addr_t; // address and size (file and memory)
293typedef Rose_STL_Container<Rose::BinaryAnalysis::Address> SgAddressList;
294typedef SgAddressList* SgAddressListPtr;
295
296#ifdef ROSE_ENABLE_BINARY_ANALYSIS
297typedef Rose_STL_Container<rose_rva_t> SgRVAList;
298typedef SgRVAList* SgRVAListPtr;
299
300typedef Rose_STL_Container<SgAsmPEExportEntry*> SgAsmPEExportEntryPtrList;
301typedef SgAsmPEExportEntryPtrList* SgAsmPEExportEntryPtrListPtr;
302#endif
303
304typedef Rose_STL_Container<uint16_t> SgUnsigned16List;
305typedef SgUnsigned16List* SgUnsigned16ListPtr;
306
307typedef Rose_STL_Container<unsigned> SgUnsignedList;
308typedef SgUnsignedList* SgUnsignedListPtr;
309
310// DQ (8/7/2008): Added list of size_t types for binary format support.
311typedef Rose_STL_Container<size_t> SgSizeTList;
312typedef SgSizeTList* SgSizeTListPtr;
313
314#ifdef ROSE_ENABLE_BINARY_ANALYSIS
315typedef Rose_STL_Container<SgAsmNEEntryPoint*> SgAsmNEEntryPointPtrList;
316typedef SgAsmNEEntryPointPtrList* SgAsmNEEntryPointPtrListPtr;
317
318typedef Rose_STL_Container<SgAsmNERelocEntry*> SgAsmNERelocEntryPtrList;
319typedef SgAsmNERelocEntryPtrList* SgAsmNERelocEntryPtrListPtr;
320
321typedef Rose_STL_Container<SgAsmLEPageTableEntry*> SgAsmLEPageTableEntryPtrList;
322typedef SgAsmLEPageTableEntryPtrList* SgAsmLEPageTableEntryPtrListPtr;
323
324typedef Rose_STL_Container<SgAsmLEEntryPoint*> SgAsmLEEntryPointPtrList;
325typedef SgAsmLEEntryPointPtrList* SgAsmLEEntryPointPtrListPtr;
326
327// The OS/2 SgAsmLERelocEntry reused the Windows SgAsmNERelocEntry
329typedef Rose_STL_Container<SgAsmLERelocEntry*> SgAsmLERelocEntryPtrList;
330typedef SgAsmLERelocEntryPtrList* SgAsmLERelocEntryPtrListPtr;
331
332typedef Rose_STL_Container<SgAsmGenericHeader*> SgAsmGenericHeaderPtrList;
333typedef SgAsmGenericHeaderPtrList* SgAsmGenericHeaderPtrListPtr;
334
335typedef Rose_STL_Container<SgAsmGenericDLL*> SgAsmGenericDLLPtrList;
336typedef SgAsmGenericDLLPtrList* SgAsmGenericDLLPtrListPtr;
337#endif
338
339typedef Rose_STL_Container<unsigned char> SgUnsignedCharList;
340typedef SgUnsignedCharList* SgUnsignedCharListPtr;
341
342// DQ (10/1/2008): Added support for lists of SgModuleStatement where they are
343// not a part of the current translation unit. A place for the information in
344// the *.mod files to be put. This is just the type declaration for the list.
345typedef Rose_STL_Container<SgModuleStatement*> SgModuleStatementPtrList;
346typedef SgModuleStatementPtrList* SgModuleStatementPtrListPtr;
347
348// TOO1 (5/16/2013)
349typedef Rose_STL_Container<SgJavaPackageDeclaration*> SgJavaPackageDeclarationPtrList;
350
351// DQ (6/12/2013): Added to support use in Java support (in SgSourceFile).
352typedef Rose_STL_Container<SgJavaImportStatement*> SgJavaImportStatementPtrList;
353
354// DQ (6/12/2013): Added to support use in Java support (in SgSourceFile).
355typedef Rose_STL_Container<SgClassDeclaration*> SgClassDeclarationPtrList;
356
357// DQ (10/4/2008): Support for list of names or rename entries for the SgUseStatement (Fortran 90 support)
358typedef Rose_STL_Container<SgRenamePair*> SgRenamePairPtrList;
359typedef SgRenamePairPtrList* SgRenamePairPtrListPtr;
360
361// DQ (10/6/2008): Added improved support for F90 interfaces using interface bodies.
362typedef Rose_STL_Container<SgInterfaceBody*> SgInterfaceBodyPtrList;
363typedef SgInterfaceBodyPtrList* SgInterfaceBodyPtrListPtr;
364
365#ifdef ROSE_ENABLE_BINARY_ANALYSIS
366// DQ (11/5/2008): Addes as part of general Dwarf support in the AST for binary executables.
367typedef Rose_STL_Container<SgAsmDwarfLine*> SgAsmDwarfLinePtrList;
368typedef SgAsmDwarfLinePtrList* SgAsmDwarfLinePtrListPtr;
369
370typedef Rose_STL_Container<SgAsmDwarfMacro*> SgAsmDwarfMacroPtrList;
371typedef SgAsmDwarfMacroPtrList* SgAsmDwarfMacroPtrListPtr;
372
373typedef Rose_STL_Container<SgAsmDwarfConstruct*> SgAsmDwarfConstructPtrList;
374typedef SgAsmDwarfConstructPtrList* SgAsmDwarfConstructPtrListPtr;
375
376typedef Rose_STL_Container<SgAsmDwarfCompilationUnit*> SgAsmDwarfCompilationUnitPtrList;
377typedef SgAsmDwarfCompilationUnitPtrList* SgAsmDwarfCompilationUnitPtrListPtr;
378#endif
379
380// DQ (11/28/2008): Added support for list of integers (used for flag list in SgLinemarkerDirectiveStatement).
381// typedef std::vector<int> SgIntegerList;
382// Liao, 5/30/2009 types for OpenMP support
383typedef Rose_STL_Container<SgOmpClause*> SgOmpClausePtrList;
384typedef SgOmpClausePtrList* SgOmpClausePtrListPtr;
385
386typedef Rose_STL_Container<SgOmpSectionStatement*> SgOmpSectionStatementPtrList;
387typedef SgOmpSectionStatementPtrList* SgOmpSectionStatementPtrListPtr;
388
389// DQ (1/13/2014): Added support for Java annotations.
390typedef Rose_STL_Container<SgJavaMemberValuePair*> SgJavaMemberValuePairPtrList;
391typedef SgJavaMemberValuePairPtrList* SgJavaMemberValuePairPtrListPtr;
392
393// DQ (3/6/2014): Added support for Untyped IR nodes.
394
395// Rasmussen (08/25/2022): Removed all untyped Sage nodes. Ultimately it proved easier to
396// construct regular IR nodes from the Jovial parser. Using the untyped system just led to an
397// unnecessary step and wasted effort.
398
399#ifdef ROSE_ENABLE_BINARY_ANALYSIS
401typedef Rose_STL_Container<SgAsmRegisterReferenceExpression*> SgAsmRegisterReferenceExpressionPtrList;
402typedef SgAsmRegisterReferenceExpressionPtrList* SgAsmRegisterReferenceExpressionPtrListPtr;
403#endif
404
405// DQ (9/3/2014): Added support for C++11 Lambda expressions.
406typedef Rose_STL_Container<SgLambdaCapture*> SgLambdaCapturePtrList;
407typedef SgLambdaCapturePtrList* SgLambdaCapturePtrListPtr;
408
409// DQ (9/15/2018) Add SgSourceFile list support for header file reporting (for unparse headers option).
410class SgSourceFile;
411typedef Rose_STL_Container<SgSourceFile*> SgSourceFilePtrList;
412typedef SgSourceFilePtrList* SgSourceFilePtrListPtr;
413
414// DQ (9/18/2018) Add SgIncludeFile list support for header file reporting (for unparse headers option).
415class SgIncludeFile;
416typedef Rose_STL_Container<SgIncludeFile*> SgIncludeFilePtrList;
417typedef SgIncludeFilePtrList* SgIncludeFilePtrListPtr;
418
419// PP (11/24/2020) Add support for Ada representation clauses
421typedef Rose_STL_Container<SgAdaComponentClause*> SgAdaComponentClausePtrList;
422typedef SgAdaComponentClausePtrList* SgAdaComponentClausePtrListPtr;
423
424// DQ (10/28/2013): Forward declaration for new token unparsing support.
425class TokenStreamSequenceToNodeMapping;
426class FrontierNode;
427class PreviousAndNextNodeData;
428
429// DQ (11/30/2015): Added support for mapping of the AST to macro expansions.
430class MacroExpansion;
431
432#ifdef ROSE_ENABLE_BINARY_ANALYSIS
433#include <SgSharedVector.h>
434
437
438typedef Rose_STL_Container<SgAsmElfRelocEntry*> SgAsmElfRelocEntryPtrList;
439typedef SgAsmElfRelocEntryPtrList* SgAsmElfRelocEntryPtrListPtr;
440
441typedef Rose_STL_Container<SgAsmElfNoteEntry*> SgAsmElfNoteEntryPtrList;
442typedef SgAsmElfNoteEntryPtrList* SgAsmElfNoteEntryPtrListPtr;
443
444typedef Rose_STL_Container<SgAsmElfDynamicEntry*> SgAsmElfDynamicEntryPtrList;
445typedef SgAsmElfDynamicEntryPtrList* SgAsmElfDynamicEntryPtrListPtr;
446
447typedef Rose_STL_Container<SgAsmElfEHFrameEntryCI*> SgAsmElfEHFrameEntryCIPtrList;
448typedef SgAsmElfEHFrameEntryCIPtrList* SgAsmElfEHFrameEntryCIPtrListPtr;
449
450typedef Rose_STL_Container<SgAsmElfEHFrameEntryFD*> SgAsmElfEHFrameEntryFDPtrList;
451typedef SgAsmElfEHFrameEntryFDPtrList* SgAsmElfEHFrameEntryFDPtrListPtr;
452
453typedef Rose_STL_Container<SgAsmElfSegmentTableEntry*> SgAsmElfSegmentTableEntryPtrList;
454typedef SgAsmElfSegmentTableEntryPtrList* SgAsmElfSegmentTableEntryPtrListPtr;
455
456typedef Rose_STL_Container<SgAsmElfSymverEntry*> SgAsmElfSymverEntryPtrList;
457typedef SgAsmElfSymverEntryPtrList* SgAsmElfSymverEntryPtrListPtr;
458
459typedef Rose_STL_Container<SgAsmElfSymverDefinedEntry*> SgAsmElfSymverDefinedEntryPtrList;
460typedef SgAsmElfSymverDefinedEntryPtrList* SgAsmElfSymverDefinedEntryPtrListPtr;
461
462typedef Rose_STL_Container<SgAsmElfSymverDefinedAux*> SgAsmElfSymverDefinedAuxPtrList;
463typedef SgAsmElfSymverDefinedAuxPtrList* SgAsmElfSymverDefinedAuxPtrListPtr;
464
465typedef Rose_STL_Container<SgAsmElfSymverNeededEntry*> SgAsmElfSymverNeededEntryPtrList;
466typedef SgAsmElfSymverNeededEntryPtrList* SgAsmElfSymverNeededEntryPtrListPtr;
467
468typedef Rose_STL_Container<SgAsmElfSymverNeededAux*> SgAsmElfSymverNeededAuxPtrList;
469typedef SgAsmElfSymverNeededAuxPtrList* SgAsmElfSymverNeededAuxPtrListPtr;
470
471typedef Rose_STL_Container<SgAsmJvmAttribute*> SgAsmJvmAttributePtrList;
472typedef SgAsmJvmAttributePtrList* SgAsmJvmAttributePtrListPtr;
473
474typedef Rose_STL_Container<SgAsmJvmBootstrapMethod*> SgAsmJvmBootstrapMethodPtrList;
475typedef SgAsmJvmBootstrapMethodPtrList* SgAsmJvmBootstrapMethodPtrListPtr;
476
477typedef Rose_STL_Container<SgAsmJvmInnerClassesEntry*> SgAsmJvmInnerClassesEntryPtrList;
478typedef SgAsmJvmInnerClassesEntryPtrList* SgAsmJvmInnerClassesEntryPtrListPtr;
479
480typedef Rose_STL_Container<SgAsmJvmConstantPoolEntry*> SgAsmJvmConstantPoolEntryPtrList;
481typedef SgAsmJvmConstantPoolEntryPtrList* SgAsmJvmConstantPoolEntryPtrListPtr;
482
483typedef Rose_STL_Container<SgAsmJvmExceptionHandler*> SgAsmJvmExceptionHandlerPtrList;
484typedef SgAsmJvmExceptionHandlerPtrList* SgAsmJvmExceptionHandlerPtrListPtr;
485
486typedef Rose_STL_Container<SgAsmJvmField*> SgAsmJvmFieldPtrList;
487typedef SgAsmJvmFieldPtrList* SgAsmJvmFieldPtrListPtr;
488
489typedef Rose_STL_Container<SgAsmJvmMethodParametersEntry*> SgAsmJvmMethodParametersEntryPtrList;
490typedef SgAsmJvmMethodParametersEntryPtrList* SgAsmJvmMethodParametersEntryPtrListPtr;
491
492typedef Rose_STL_Container<SgAsmJvmLineNumberEntry*> SgAsmJvmLineNumberEntryPtrList;
493typedef SgAsmJvmLineNumberEntryPtrList* SgAsmJvmLineNumberEntryPtrListPtr;
494
495typedef Rose_STL_Container<SgAsmJvmLocalVariableEntry*> SgAsmJvmLocalVariableEntryPtrList;
496typedef SgAsmJvmLocalVariableEntryPtrList* SgAsmJvmLocalVariableEntryPtrListPtr;
497
498typedef Rose_STL_Container<SgAsmJvmLocalVariableTypeEntry*> SgAsmJvmLocalVariableTypeEntryPtrList;
499typedef SgAsmJvmLocalVariableTypeEntryPtrList* SgAsmJvmLocalVariableTypeEntryPtrListPtr;
500
501typedef Rose_STL_Container<SgAsmJvmMethod*> SgAsmJvmMethodPtrList;
502typedef SgAsmJvmMethodPtrList* SgAsmJvmMethodPtrListPtr;
503
504typedef Rose_STL_Container<SgAsmJvmStackMapFrame*> SgAsmJvmStackMapFramePtrList;
505typedef SgAsmJvmStackMapFramePtrList* SgAsmJvmStackMapFramePtrListPtr;
506
507typedef Rose_STL_Container<SgAsmJvmStackMapVerificationType*> SgAsmJvmStackMapVerificationTypePtrList;
508typedef SgAsmJvmStackMapVerificationTypePtrList* SgAsmJvmStackMapVerificationTypePtrListPtr;
509
510typedef Rose_STL_Container<SgAsmPERVASizePair*> SgAsmPERVASizePairPtrList;
511typedef SgAsmPERVASizePairPtrList* SgAsmPERVASizePairPtrListPtr;
512#endif
513
514// DQ (11/20/2010): Added type for SgToken list
515// Build a type for the SgToken list.
516typedef Rose_STL_Container<SgToken*> SgTokenPtrList;
517typedef SgTokenPtrList* SgTokenPtrListPtr;
518
519// DQ (11/6/2008): This is the support for mapping instructions to source code and back.
520// When it is further along it will be moved to the SgAsmDwarfCompilationUnit as a member
521// function which will built it if it has not previously been built.
522// This is how a triplet would be built (in the future), instead of a pair, but for now use a pair.
523// std::tr1::tuple<int, int, int> tp;
524typedef std::pair<int,int> LineColumnFilePosition;
525typedef std::pair<int,LineColumnFilePosition> FileIdLineColumnFilePosition;
526
527typedef std::pair<uint64_t,FileIdLineColumnFilePosition> AddressFileIdLineColumnFilePositionPair;
528typedef std::pair<FileIdLineColumnFilePosition,uint64_t> FileIdLineColumnFilePositionAddressPair;
529
530// typedef std::multimap<uint64_t,FileIdLineColumnFilePosition> SgInstructionAddressSourcePositionMapPtrList;
531// typedef std::multimap<FileIdLineColumnFilePosition,uint64_t> SgSourcePositionInstructionAddressMapPtrList;
532typedef std::multimap<uint64_t,FileIdLineColumnFilePosition> SgInstructionAddressSourcePositionMapPtrList;
533typedef std::multimap<FileIdLineColumnFilePosition,uint64_t> SgSourcePositionInstructionAddressMapPtrList;
534
535typedef std::pair<SgInstructionAddressSourcePositionMapPtrList*,SgSourcePositionInstructionAddressMapPtrList*> DwarfInstructionSourceMapReturnType;
536
537ROSE_DLL_API std::ostream& operator<<(std::ostream&, const SgName&);
538
539// DQ (12/6/2003): Added output function for SgBitVector objects
540std::ostream& operator<<(std::ostream&, const std::vector<bool>&);
541
542// DQ (8/3/2005): Added output function for STL set objects
543std::ostream& operator<<(std::ostream&, const std::set<int>&);
544
545// DQ (10/4/2006): Added output function for STL map objects
546std::ostream& operator<<(std::ostream&, const std::map<SgNode*,int>&);
547
548// DQ (10/6/2006): Added output function for STL map objects
549std::ostream& operator<<(std::ostream&, const std::map<SgNode*,std::string>&);
550
551#ifdef ROSE_ENABLE_BINARY_ANALYSIS
552std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgAsmStatement*>&);
553std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgAsmExpression*>&);
554#endif
555
556// DQ (11/20/2007): Part of support for the Fortran data statement
557std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgDataStatementObject*>&);
558std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgDataStatementValue*>&);
559std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgCommonBlockObject*>&);
560std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgDimensionObject*>&);
561std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgLabelSymbol*>&);
562std::ostream& operator<<(std::ostream&, const Rose_STL_Container<SgFormatItem*>&);
563
564// DQ (4/19/2006): forward declaration of PreprocessingInfo so that
565// PreprocessingInfo can follow Sage III class declarations and contain
566// a Sg_File_Info object (to record the filename of the comments and
567// CPP directoves).
568// class PreprocessingInfo;
569
570// DQ (4/23/2006): The friend declaration the SgProject class is not enough this must be defined outside of the class (for g++ 4.1.0).
571std::ostream & operator<< ( std::ostream & os, const Rose_STL_Container<std::string> & l );
572
573#ifndef SWIG
574
575std::ostream& operator<<(std::ostream&, const std::multimap<Rose::BinaryAnalysis::Address, Rose::BinaryAnalysis::Address>&);
576std::ostream& operator<<(std::ostream&,
577 const std::vector<std::pair<Rose::BinaryAnalysis::Address, Rose::BinaryAnalysis::Address>>&);
578// struct SgAsmGenericFormat::fileDetails;
579// std::ostream & operator<< ( std::ostream & os, const SgAsmGenericFormat::fileDetails & sb );
580std::ostream & operator<< ( std::ostream & os, const struct stat & sb );
581
582// endif for ifndef ROSE_USE_SWIG_SUPPORT
583#endif
584
585#ifdef ROSE_ENABLE_BINARY_ANALYSIS
586// DQ (3/15/2007): Added support for binaries
587std::ostream & operator<< ( std::ostream & os, const Rose_STL_Container<SgAsmStatement*> & l );
588#endif
589
590// DQ (5/8/2007): Added support for type elaboration lists, hidden type lists, and hidden declaration lists.
591std::ostream & operator<< ( std::ostream & os, const std::set<SgSymbol*> & l );
592
593#endif
Base class for references to a machine register.
This class represents the concept of a block (not a basic block from control flow analysis).
This class represents the concept of a declaration statement.
This class represents a directory within a projects file structure of files and directories.
This class represents the notion of an expression. Expressions are derived from SgLocatedNodes,...
This class represents a source file for a project (which may contian many source files and or directo...
This class represents the notion of a declared variable.
This class represents strings within the IR nodes.
This class represents the base class for all IR nodes within Sage III.
This class represents a OLD concept of the structure require for qualified names when they were in th...
This class represents the notion of a statement.
This class represents template argument within the use of a template to build an instantiation.
This class represents the base class for all types.
This class represents the variable refernece in expressions.